2011-09-07 60 views
4

我有一個簡單的問題(至少不是我..)。我已經以不同長度的多個數據幀列表結束了。我要統計每個數據幀的長度..如何計算行數?

mylist <- list (a = data.frame(i = 1:10, j= 11:20), b = data.frame(i = 1:5, j= 11:15), c = data.frame(i = 1:8, j= 11:18)) 
mylist 
$a 
    i j 
1 1 11 
2 2 12 
3 3 13 
4 4 14 
5 5 15 
6 6 16 
7 7 17 
8 8 18 
9 9 19 
10 10 20 

$b 
    i j 
1 1 11 
2 2 12 
3 3 13 
4 4 14 
5 5 15 

$c 
    i j 
1 1 11 
2 2 12 
3 3 13 
4 4 14 
5 5 15 
6 6 16 
7 7 17 
8 8 18 

我可憐代碼:

lapply(mylist, function(y)length(y) 

$a 
[1] 2 

$b 
[1] 2 

$c 
[1] 2 

哦....沒有..... 怎麼能指望我在每個組件的行數據幀,並得到一個新的向量:

# number of rows in each component dataframe of the list 
myvec 
[1] 10 5 8 

謝謝你的時間......我很感激......

+1

'sapply'而不是'lapply'。 – joran

回答

14

試試這個:

myvec <- sapply(mylist, NROW) 

length給人以data.frames「奇」的結果,因爲data.frames真的是相同長度的向量的列表。 length(data.frame)爲您提供了基礎列表的長度,即data.frame的列數。

NROWNCOL不錯,因爲它們傾向於給大多數物體「預期」的結果。我交互使用它們很多,但在編寫穩定的代碼(例如程序,包)時會回落到nrowncollength,因爲它們避免了一些額外函數調用的開銷。

+0

謝謝你欣賞 –

+0

謝謝..讚賞 –

1
lengths(mylist) 

將返回列表中每個元素的長度。注意「長度」(複數)