【问题标题】:R: Question about using lapply() function instead of for loopR:关于使用 lapply() 函数而不是 for 循环的问题
【发布时间】:2021-01-13 13:12:32
【问题描述】:

我已经成功运行了以下 for 循环函数:

for (i in 1:10){
   X=get(paste0("Y_lines",i))
   X <- tm_map(X, content_transformer(tolower))
   assign(paste0("Y_lines",i), X)
rm(X)}

我想改用 lapply() 函数,因为它更省时。我玩过这个功能,但没有发现任何成功。这是我最近的努力:

lapply(X = Y_lines[1:10], FUN = tm_map(X, content_transformer(tolower)))

这是我第一次使用 lapply,如果我犯了一些基本错误,请见谅。

提前谢谢你。

【问题讨论】:

  • for 循环中的 X 被初始化为原子字符 "Y_lines1"、Y_lines2" 等。 lapply 函数中的 X 建议一个名为 Y_lines 的向量,索引从 1 到 10。即 @ 987654325@ 如果Y_lines 是一个向量,在你的循环X = Y_lines[i] 和你的lapply 函数中,lapply(Y_lines, ...). The lapply` 函数将隐式循环 Y_lines。
  • 感谢您的回答!下面的答案似乎奏效了,但按照建议,我也会尝试这种方法并查看结果。

标签: r for-loop lapply


【解决方案1】:

试一试,注意这是未经测试的,您可能需要在 list2env()lapply() 函数之间插入一个 setNames() 函数:(根据附加问题进行编辑): 我们可以存储匿名函数第一部分的结果,然后在其上应用另一个函数,如下所示:

list2env(lapply(mget(ls(.GlobalEnv, pattern = "Y_lines"), envir = .GlobalEnv), function(x){
    y <- tm_map(x, content_transformer(tolower))
    tm_map(y, removeWords, stopwords("english"))
  }
), .GlobalEnv)

或者我们可以函数重载:

list2env(lapply(mget(ls(.GlobalEnv, pattern = "Y_lines"), envir = .GlobalEnv), function(x){
    tm_map(tm_map(x, content_transformer(tolower)), removeWords, stopwords("english"))
  }
), .GlobalEnv)

【讨论】:

  • 工作就像一个魅力,谢谢!出于好奇,是否可以一次应用多个功能?
  • @VladimirTech31。是的,在匿名函数内部,你甚至可以存储局部范围的变量并对其进行操作等。
  • 我尝试在 lapply 大括号中添加一个带有几个单独函数的新行,但它只运行了最后一个函数。您能否举例说明多个函数的外观?
  • @VladimirTech31 抱歉回复晚了,见上文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多