无法使用lapply将变量及其名称加入到列表中?

时间:2018-03-08 12:12:05

标签: r

我试过使用下面的代码但是失败了。我想知道它失败的原因以及正确(优雅)的方法是什么?

rm(list=ls())

a <- 1
b <- 2
res <- lapply(ls(), function(x, l) { l$x <- get(x)}, l=list())

我希望我得到像

这样的结果
res
# $a
# [1] 1

# $b
# [1] 2

但我得到的是

res
# [[1]]
# [1] 1

# [[2]]
# [1] 2

2 个答案:

答案 0 :(得分:3)

我们可以使用mget获取多个对象的值,并返回named list

mget(ls())
#$a
#[1] 1

#$b
#[1] 2

如果我们需要使用get,请使用ls()

设置名称
setNames(lapply(ls(), get), ls())

答案 1 :(得分:1)

使用 sapply

sapply(ls(), get, simplify = FALSE)
# $a
# [1] 1
# 
# $b
# [1] 2

sapply 具有简化 USE.NAMES 参数,两者的默认值均为 TRUE 。因此,通过将简化设置为 FALSE ,我们将结果保留为命名列表。