我有list
:
list <- list(a=1, b=1:3, c=4)
如果我取消列表,则返回以下内容:
> unlist(list)
a b1 b2 b3 c
1 1 2 3 4
有没有办法将list
拉开,所以我可以得到:
a <- 1
b <- 1:3
c <- 4
感谢
答案 0 :(得分:1)
正如评论中指出的那样,这是不可取的。将这些变量从列表环境中分解出来只会在我们必须跟踪的全局环境中创建更多变量。
但如果必须,可以使用assign()
和mapply()
执行此类操作:
> ls()
# character(0)
> X <- list(a = 1, b = 1:3, d = 4)
> invisible(mapply(function(x, y) assign(x, y, .GlobalEnv), names(X), X))
> ls()
# [1] "a" "b" "d" "X"
或者您可以在call()
循环中评估<-
到for
:
> ls()
# character(0)
> X <- list(a = 1, b = 1:3, d = 4)
> for(i in seq_along(X)){
eval(call("<-", names(X[i]), X[[i]]))
}
> ls()
# [1] "a" "b" "d" "i" "X"
请注意,我使用不同的变量名称来避免覆盖基本R函数c()
和list()
答案 1 :(得分:0)
以下代码应该做你想要的,虽然它不是非常优雅。
count = 0
listNames <- names(listy)
while (count < length(listy)) {
count = count + 1
assign(listNames[count], listy[count])
}
答案 2 :(得分:0)
遵循rawr的建议,避免命名对象,例如&#34; list&#34;,&#34; dataframe&#34;等
使用for-loop
的非最佳解决方案,其中data
是您的列表:
for (i in 1:length(data)) {
assign (names(data)[i],data[[i]])
}
检查创建的对象:
> ls()
"a" "b" "c" "data" "i"
> a
[1] 1
> b
[1] 1 2 3
> c
[1] 4