如何根据R

时间:2015-11-13 01:48:37

标签: r list

虚拟例子:

1> L = vector('list',100)#prefill empty list
1> for (i in 1:100){
1+ L[[i]]$letter = letters[rgeom(1,.5)+1]#populate it with a letter
1+ L[[i]]$number = runif(1)#and a number
1+ }
1> i = ceiling(runif(100,0,100))#an (arbitrary) vector of indices
1> x = L[[i]]$letter #I want the ith letter
Error in L[[i]] : no such index at level 2

我希望x包含letter i元素的L对象。 (i的顺序与x的索引顺序没有任何关系

没有循环,这样做的好方法是什么?

以下是我的编辑器的复制/粘贴,而不是我的终端窗口,对于那些可能更容易找到它的人来说:

L = vector('list',100)
for (i in 1:100){
    L[[i]]$letter = letters[rgeom(1,.5)+1]
    L[[i]]$number = runif(1)
}
i = ceiling(runif(100,0,100))
x = L[[i]]$letter

1 个答案:

答案 0 :(得分:2)

相关文档位于help("[[")

  

[[[$之间最重要的区别是[可以选择多个元素,而另外两个选择单个元素。

因此,我们需要使用L[i]提取值。

从那里,要访问$letter每个元素的L[i]部分,我们可以使用sapply

sapply(L[i], `[[`, "letter")

在这里使用$代替[[很诱人,但for obscure reasons, it's not a good idea

评论。这是构建一些示例数据的另一种方法。

set.seed(1)
L = replicate(100, list(
  letter = letters[rgeom(1,.5)+1], 
  number = runif(1)
), simplify = FALSE)
i = sample(100, 100, replace=TRUE)

set.seed放在随机生成的示例之前通常很有用,这样每个人都在看同样的事情。