将列表划分为向量

时间:2014-08-17 21:41:56

标签: r list vector

我有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

感谢

3 个答案:

答案 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