【发布时间】:2013-05-28 08:39:26
【问题描述】:
当我开始预初始化 R 中的列表列表时,我想知道列表对象在用作 rep() 中的值时的行为。当我尝试以下...
listOfLists <- rep(list(1, 2), 4)
... listOfLists 是单个列表:
1 2 1 2 1 2 1 2
但是,我会假设它是一个列表列表,其中最终包含值 1 和 2:
1 2
1 2
1 2
1 2
要获得所需的结果,我必须另外用 c() 包围值条目:
listOfLists <- rep(list(c(1, 2)), 4)
我想知道为什么在 R 中会出现这种情况。 list 不应该像通常那样创建一个功能齐全的列表,而不是做类似于 c() 的事情吗?为什么用 c() 对值进行分组实际上可以解决这里的问题?
感谢您的意见!
结论: Ben Bolker 和 Peyton 的帖子都给出了最终答案。这既不是 list()- 也不是 c()- 函数的行为。相反,rep() 似乎将列表和向量的条目合并为一个。用另一个容器包围这些值会使 rep() 实际上“忽略”第一个但重复第二个容器。
【问题讨论】:
-
我不太明白你的编辑,所以我认为你错了。
rep没有什么好笑的:它复制了你给它的东西。只有您似乎忽略了list(1, 2)、list(c(1, 2))或list(list(1, 2))之间的区别。这确实是三个不同的对象。 -
正如 Ben Bolker 在函数手册参考中指出的“rep 复制 x 中的值”:rep 获取给定列表/容器中的值并重复它们。我认为它只是简单地重复给定的列表/容器,因为它被输入到 rep() 函数中。所以实际上是 rep() 的工作方式让我不久前感到困惑,而不是列表或向量。