2012-06-25 56 views
0

我試圖實現一個非常簡單的功能:計數使用「by」選擇的矩陣的每個子集的行數(m1是4列矩陣):R:功能通過 - 處理一行和多行子集相同

by(m1, m1[,2:4], nrow) 

但我得到錯誤「參數必須具有相同的長度」。據我所知,所選擇的子集是一個矢量而不是矩陣,當它只有一行時。因此,「nrow」變得無效。我該如何處理?

+0

您可以添加'SIMPLIFY = FALSE',你不會得到矢量的子集,而是nrow = 1的矩陣/ data.frames。 –

回答

0

你說得對,nrow只對矩陣參數有效,所以爲什麼不通過矩陣?

> nrow(1:3) 
NULL 
> nrow(matrix(1:3,ncol=3)) 
[1] 1 

你可以只是function(x) nrow(matrix(x,ncol=3))更換您的來電nrow。完整的表達式將是

by(m1, m1[,2:4], function(x) nrow(matrix(x,ncol=3))) 
2

NROW函數在矩陣,數據框和向量上工作。

> NROW(1:3) 
#[1] 3 
相關問題