如何将 lapply 的输出保存(分配)到 R 中的单个变量中?

Posted

技术标签:

【中文标题】如何将 lapply 的输出保存(分配)到 R 中的单个变量中?【英文标题】:How to save(assign) the output from lapply into individual variables in R? 【发布时间】:2015-06-30 13:07:10 【问题描述】:

我有一个非常简单的问题,但我已经准备好了! 我有一个列表作为输出:

举个例子:

lapply(1:40, function(x) (1+x))

输出:

[[1]]
[1] 2

[[2]]
[1] 3

[[3]]
[1] 4

直到

[[40]]
[1] 41

我想知道如何使用循环将此列表的每个输出分配给一个新变量? 像这样的

a<- [[2]]; b <- [[3]]; ... az <- [[40]] 等等。

提前致谢,

【问题讨论】:

请问您为什么要这样做? 你有更多的变量要分配(39)然后是字母(26)。 是的,我的功能与这个简单的功能不同。我必须对 1-40 的一些变量使用不同的截止值,使用 lapply 和 function(x) 来做这件事要容易得多;但我不知道如何单独保存输出! :) @user3576287 当您说“保存”时,您是否只是想将每个元素保存到单独的文件中?我只是想弄清楚为什么您希望所有这些额外的变量在您的工作区中浮动,而不是直接使用列表元素。 是的,我想将它们中的每一个都保存为全局环境中的单个元素。 【参考方案1】:

这是我的解决方案,它要求您的 lapply 输出以名称 ll 存储,但我认为可以轻松修改。

ll <- lapply(1:40, function(x) (1+x))
nam <- "list_output_"
val <- c(1:length(ll))
for(i in 1:length(val))
    assign(
        paste(nam, val, sep = "")[i], ll[[i]]
        ) 

输出将是list_output_1 等等。

【讨论】:

【参考方案2】:

我为名称创建了一个向量并使用了一个短循环。也许有人可以矢量化它。

var_names <- c(letters, paste0(letters[1],letters[1:13]))
for(i in seq_along(var_names)) 
  assign(var_names[i], lapply(1:40, function(x) (1+x))[[i+1]])

a
[1] 3
b
[1] 4
am
[1] 41

【讨论】:

以上是关于如何将 lapply 的输出保存(分配)到 R 中的单个变量中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 lapply 将列表元素放入不同的数据框中

如何在闪亮中使用 lapply 存储输出?

如何在 R 中使用 lapply 消除异常

如何将警告和错误保存为函数的输出?

如何使用 R 将 Google Cloud Datalab 输出保存到 BigQuery

如何使用R将Google Cloud Datalab输出保存到BigQuery中