R中双嵌套列表的奇怪行为

时间:2015-03-03 20:51:23

标签: r list nested

这只花了我两个小时的调试来确定:

> list1 = list()  # empty list
> list1['first'] = list(a=list(a1='goat', a2='horse'), b=42)  # double-nested
> print(list1$first$b)  
NULL  # Should be 42?
> print(list1)  # let's check the actual contents of list1
$first
$first$a1  # how did the contents of the innermost a-list end up here?
[1] "goat"

$first$a2
[1] "horse"

在这种情况下,分配给'first'的列表将成为a中的列表,因此b会在没有警告的情况下消失。这里发生了什么,b值在哪里?

我使用的是R 3.0.2。当R阻止我做上述事情时,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:0)

正如joran在评论中指出的那样,解决方案是在作业中使用双括号:

list1[['first']] = list(a=list(a1='goat', a2='horse'), b=42)

如果您使用单括号,显然您会在较新的R版本中收到警告,但在旧版本中则不会收到警告。