我已經從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