我正在尝试实现一个非常简单的功能:计算使用“by”选择的矩阵的每个子集的行数(m1 是一个 4 列矩阵):
by(m1, m1[,2:4], nrow)
但我收到错误“参数必须具有相同的长度”。据我了解,当所选子集只有一行时,它是向量而不是矩阵。因此,“nrow”变得无效。我该如何处理?
NROW 函数适用于矩阵、数据帧和向量。
> NROW(1:3)
#[1] 3
你是对的,这nrow
仅对矩阵参数有效,那么为什么不传入矩阵呢?
> nrow(1:3)
NULL
> nrow(matrix(1:3,ncol=3))
[1] 1
您可以将您的电话替换nrow
为function(x) nrow(matrix(x,ncol=3))
. 完整的表达式是
by(m1, m1[,2:4], function(x) nrow(matrix(x,ncol=3)))