我已经从STATA过渡到R,我正在试验不同的数据类型,以便R的数据结构在我的脑海中清晰。索引在R的嵌套列表结构
下面是我如何设置我的数据结构:
b<-list(u=5,v=12)
c<-list(u=7)
j<-list(name="Joe",salary=55000,union=T)
bcj<-list(b,c,j)
现在,我试图找出不同的方式来访问U = 5。我相信,有三种方式:
Try1:
bcj[[1]][[1]]
我5.正确的!
Try2:
bcj[[1]][["u"]]
我5.正确的!
Try3:
bcj[[1]]$u
我5.正确的!
Try4
bcj[[1]][1][1]
这里就是我的了:
bcj[[1]][1][1]
$u
[1] 5
class(bcj[[1]][1][1])
[1] "list"
问题1:为什么会出现这种情况?
另外,我尝试了以下内容:
bcj[[1]][1][1][1][1][1]
$u
[1] 5
class(bcj[[1]][1][1][1][1][1])
[1] "list"
问题2:我本来期望一个错误,因为我不认为存在BCJ这么多的名单,但[R给了我一个清单。为什么发生这种情况?
PS:我的确在看SO this thread,但它谈论的是另一个问题。
谢谢这个。这有助于。有趣的是,如果我创建t1 <-list(u = 5,v = 7),然后执行t1 [2] [1] [1] [1] ...这也可以。但是,t1 [[2]] [2]给出了NA .. – watchtower
这是一种正常行为。 R中的基本单位是一个向量。 't1 [2]'返回一个向量(长度为1)。 't1 [2] [1]'返回该向量中的第一个条目,这是一个数字,但从某种意义上说,它也是一个长度为1的向量,这可以继续。至于't1 [[2]] [2]',你需要一个不存在的元素,所以不需要错误信息。 –
Zheyuan和p_barill,感谢您的精彩评论。我知道你已经回答了我的问题,但是当我想到这个问题时,我有一个快速问题。在t1的例子中(即t1 <-list(u = 5,v = 7)),长度(t1)是2,这是有意义的。此外,长度(t1 [1])为1,这也是有意义的,因为只有一个列表。但是,有什么方法可以使长度(t1 [1])大于1?我不太清楚,所以我想问你们。我会很感激你的想法。抱歉来回。 – watchtower