【问题标题】:How to modify a specific column in each dataframe in a list using lapply instead of a for loop如何使用 lapply 而不是 for 循环修改列表中每个数据框中的特定列
【发布时间】:2023-01-11 23:42:30
【问题描述】:

我有一个数据框列表,目前正在使用以下 for 循环:

  for (i in 1:length(genotypeGOI)){
    genotypeGOI[[i]]$SEQSTRAND <- '*'
  }

但我真的很想学习如何正确使用 lapply 。

我已经使用 mutate 函数尝试了许多不同的选项,但没有任何东西能满足我的需求。我最近的尝试是:

genotypeGOI <- lapply(X = genotypeGOI, FUN = function(x){
  x <- x$SEQSTRAND, '*')
})

但这给了我一个错误:

Error: unexpected ',' in:
"genotypeGOI <- lapply(X = genotypeGOI, FUN = function(x){
  x <- x$SEQSTRAND,"

基本上我想知道如何使用 lapply 更改列表中每个数据框的特定列中的值,而不真正关心这个特定问题。

我查看了与此相关的其他已发布问题,最相似的问题是创建一个函数并在 lapply 中调用它,但我真的不想为单行代码这样做。

谢谢

【问题讨论】:

  • 它给你什么错误?如果您包含一个简单的 reproducible example 以及可用于测试和验证可能的解决方案的示例输入和所需的输出,则可以更轻松地为您提供帮助。
  • 或者我猜问题是您没有为mutate 中的列分配任何内容。而不是x &lt;- x %&gt;% mutate_at(vars(SEQSTRAND), '*'),做x %&gt;% mutate(SEQSTRAND='*')
  • 我不是在寻找这个具体的例子。我只是想看看如何将 for 循环转换为 lapply。我无法弄清楚如何使用 lapply 修改列表中每个数据框中的特定列。我似乎无法使用 x$ 语法。
  • 您的示例根本不使用 x$,因此不清楚问题出在哪里。使用 x$SEQSTRAND &lt;- '*'; x 也可能有效(同样,如果没有可重现的示例,很难判断)。您只需要确保在末尾有 x,以便函数返回整个 data.frame。
  • 当我使用:genotypeGOI <- lapply(X = genotypeGOI, FUN = function(x){ x <- x$SEQSTRAND, '*') }) 我收到错误:错误:意外',' in:“genotypeGOI <- lapply(X = genotypeGOI, FUN = function(x){ x <- x$SEQSTRAND," 我也将这个添加到问题中

标签: r lapply


【解决方案1】:

您的命令 lapply(genotypeGOI, FUN = function(x) x &lt;- x$SEQSTRAND,'*') 在 R 编码中没有多大意义。即便如此,如果你刚刚做了 lapply(genotypeGOI, FUN = function(x) x[,"SEQSTRAND"] &lt;- '*') 更近但仍然不会返回你想要的东西:

df <- data.frame(ID = 1:10,
                 X = letters[1:10],
                 SEQSTRAND = NA)

lapply(genotypeGOI, FUN = function(x) x[,"SEQSTRAND"] <- '*')

genotypeGOI <- list(df, df, df)

#[[1]]
#[1] "*"

#[[2]]
#[1] "*"

#[[3]]
#[1] "*" 

要将带有SEQSTRAND的数据框作为*返回,您可以像这样使用lapply(返回x值)

lapply(genotypeGOI, function(x) {
  x[,"SEQSTRAND"] <- "*"
  x
})

# [[1]]
#      ID X SEQSTRAND
#   1   1 a         *
#   2   2 b         *
#   3   3 c         *
#   4   4 d         *
#   5   5 e         *
#   6   6 f         *
#   7   7 g         *
#   8   8 h         *
#   9   9 i         *
#   10 10 j         *
#   
#   [[2]]
#      ID X SEQSTRAND
#   1   1 a         *
#   2   2 b         *
#   3   3 c         *
#   4   4 d         *
#   5   5 e         *
#   6   6 f         *
#   7   7 g         *
#   8   8 h         *
#   9   9 i         *
#   10 10 j         *
#   
#   [[3]]
#      ID X SEQSTRAND
#   1   1 a         *
#   2   2 b         *
#   3   3 c         *
#   4   4 d         *
#   5   5 e         *
#   6   6 f         *
#   7   7 g         *
#   8   8 h         *
#   9   9 i         *
#   10 10 j         *

【讨论】:

  • 太感谢了!
猜你喜欢
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 2022-10-26
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多