2012-05-27 36 views
33

我不知道如何在R列表中創建列表。 我有幾個列表,我想將它們存儲在一個數據結構中以使訪問 更容易。但是,它看起來像,你不能在R中使用列表的列表,所以如果我從另一個列表中得到列表l1,比如說l2,那麼我不能訪問元素l1。我怎樣才能實現它?R.如何使R列表成爲列表?

編輯我將展示例如什麼不爲我工作:

list1 <- list() 
list1[1] = 1 
list1[2] = 2 
list2 <- list() 
list2[1] = 'a' 
list2[2] = 'b' 
list_all <- list(list1, list2) 
a = list_all[1] 
a[2] 
#[[1]] 
#NULL 

a應該是清單!

回答

37

你可以很容易地列出清單

list1 <- list(a = 2, b = 3) 
list2 <- list(c = "a", d = "b") 
mylist <- list(list1, list2) 

mylist現在是一個包含兩個列表的列表。要訪問list1,您可以使用mylist[[1]]。如果你希望能夠像mylist$list1那麼你需要做的somethingl像

mylist <- list(list1 = list1, list2 = list2) 
# Now you can do the following 
mylist$list1 

編輯:要回復您的編輯。只需使用雙支架索引

a <- list_all[[1]] 
a[[1]] 
#[1] 1 
a[[2]] 
#[1] 2 
+3

@capoluca要在達誠的解釋,擴大'list_all [1]'不選擇list_all'的'第一_element_。對於列表,'[''檢索_sublists_而'[['檢索_elements_。 – joran

+0

如果您創建了一個重複列表列表,比如'mylist <--list(list1,list1)',list1'是否被複制或引用兩次? –

+0

如果我在一個循環中創建一個列表的列表,所以我沒有計算並存儲在變量中的各個子列表。相反,我希望在計算它們時將它們逐個添加到列表中。 – Leonid

5

使用你的例子::

list1 <- list() 
list1[1] = 1 
list1[2] = 2 
list2 <- list() 
list2[1] = 'a' 
list2[2] = 'b' 
list_all <- list(list1, list2) 

使用 '[' 檢索列表的元素:

b = list_all[[1]] 
b 
[[1]] 
[1] 1 

[[2]] 
[1] 2 

class(b) 
[1] "list" 
1

如果你想保持一個列表的列表(類似於Python的list.append()),比這可能工作:

a <- list(1,2,3) 
b <- list(4,5,6) 
c <- append(list(a), list(b)) 

> c 
[[1]] 
[[1]][[1]] 
[1] 1 

[[1]][[2]] 
[1] 2 

[[1]][[3]] 
[1] 3 


[[2]] 
[[2]][[1]] 
[1] 4 

[[2]][[2]] 
[1] 5 

[[2]][[3]] 
[1] 6 
0

至於其他的答案中指出,一個更復雜的方式已經,你做已經創建列表的列表!這只是R的奇怪輸出而迷惑了(每個人?)。試試這個:

> str(list_all) 
List of 2 
$ :List of 2 
    ..$ : num 1 
    ..$ : num 2 
$ :List of 2 
    ..$ : chr "a" 
    ..$ : chr "b" 

而最簡單的結構是這樣的:

> str(list(list(1, 2), list("a", "b"))) 
List of 2 
$ :List of 2 
    ..$ : num 1 
    ..$ : num 2 
$ :List of 2 
    ..$ : chr "a" 
    ..$ : chr "b"