2016-07-18 37 views
3

考慮R A名單的第一行,例如可以訪問R中的列表

A=list() 
A[[1]]=c(1,2) 
A[[2]]=c(3,4) 

是否有可能返回這給列表中的每個條目的第一個元素(這裏c(1,3)矢量)?

作爲擴展:如果列表的元素不僅僅是向量而且是矩陣。是否有可能獲得每個矩陣包含第二行的第一個元素的向量?

+0

c(A [[1]] [1],A [[2]] [1]) – Berecht

回答

8
A=list() 
A[[1]]=c(1,2) 
A[[2]]=c(3,4) 
A[[3]]=c(5,6) 

A 
# [[1]] 
# [1] 1 2 

# [[2]] 
# [1] 3 4 

# [[3]] 
# [1] 5 6 

I.第一方案sapply()功能只是第一要素

sapply(A,'[[',1) 
# [1] 1 3 5 

爲了獲取可以說,第一,第三,每個嵌套表的第4個元素。不適用於此示例

sapply(A,`[`,c(1,3,4)) 

二。第二個解決方案使用for循環

for(i in 1:length(A)){ 
print (A[[i]][1]) 
} 
# [1] 1 
# [1] 3 
# [1] 5 
+0

謝謝。這只是一個簡單的例子。我的列表要大得多,所以我想也許有沒有循環的功能。 –

+1

您可以使用'sapply()'獲取嵌套列表對象的所有第一個元素的向量表單。 –

4

試試這個如下:使用

sapply(A, "[", 1) 
1

你也可以這樣做:

unlist(lapply(A, "[[", 1)) 

# [1] 1 3 

對於第二個元素:

​​

爲了做到這一點所有:

t(sapply(seq_along(A[[1]]), function(x) unlist(lapply(A, "[[", x)))) 

#  [,1] [,2] 
#[1,] 1 3 
#[2,] 2 4 
+0

作爲我的問題的延伸:如果列表的元素不僅僅是矢量,而且還包含矩陣,那又是什麼?我怎麼能訪問每個矩陣的第二行的每個第一個元素? –

+1

@ fabian92這是另一個問題。你可以發佈它並查看答案或編輯你的問題來反映這一點。 – 989

0

不是最優雅的,但你可以使用as.data.frame()將列表轉換爲數據框,然後提取第一行。

A=list() 
A[[1]]=c(1,2) 
A[[2]]=c(3,4) 
b<-as.vector(as.data.frame(A)[1,]) 
b 

    c.1..2. c.3..4. 
1  1  3