【问题标题】:repetitive task in R with a character string using sapply or a for loop使用 sapply 或 for 循环在 R 中使用字符串执行重复任务
【发布时间】:2016-12-22 19:33:53
【问题描述】:

我有重复性的任务,即提取列表的一部分并将它们保存到一个新的变量名中。

我可以使用aaa_report <- original[["aaa"]],并且我有一个名为aaa_report 的新变量,它是列表变量original 中的aaa 部分

现在我想自动化这个重复的任务:

aaa_report <- original[["aaa"]]

bbb_report <- original[["bbb"]]

ccc_report <- original[["ccc"]]

...

我有一个名为 dept 的单独“字符”列表变量,其中包含所有名称 dept <- c("aaa", "bbb", "ccc", "...")

我尝试使用sapply 并收到此错误。

sapply(dept, function(x) x"_report" <- original[[x]])

错误:“sapply(dept, function(x) x"_report""

我已经尝试了所有apply 家族和for loop 都没有运气。

for(x in dept){
  x"_report" <- original[[x]]
}

我是 R 和一般编程的初学者,所以任何建议都会有很大帮助。

【问题讨论】:

  • 为什么不将它们保留在列表中并在需要时引用它们呢?这似乎是一种更合理的方式。请参阅 gregor 在this post 上的回答,了解一些运行命名列表元素的有用方法。
  • 稍后我将使用列表中的各个部分以不同的方式组合
  • 如果你真的想这样做(将东西保存在列表中几乎总是最好的)使用get(paste0(x, "_report"))
  • 如上面 2 个 cmets 所述,做一个列表和保留一个列表,这样会更好。您可能还想查看函数split,它将为您服务。之后,在您的列表中直接使用 lapplysapply 进行所有分析

标签: r for-loop rstudio lapply sapply


【解决方案1】:

你很接近,使用assign函数:

for(x in dept) assign(paste0(x, "_report"), original[[x]])

它不适用于apply 函数,因为分配将在apply 函数的本地环境中。

正如 cmets 中所述,将所有内容保存在列表中总是更好。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多