2Ddata.frame
或matrix
1D 向量的自动转换也很好,但在编写通用函数时会产生一些问题。例如,尝试foo
使用命令过滤输入的某些列,例如foo[,1:3]
适用于 a data.frame
or matrix
:
foo=matrix(1:9,nrow=3)
bar = function(x) print(x[,1])
bar(foo) # [1] 1 2 3
但是考虑到我们首先要过滤 的一些行foo
,并且碰巧只剩下一行:
bar(foo[1,]) # Error in x[, 1] : incorrect number of dimensions
这个问题可以通过一个简单的技巧来解决:
bar = function(x) {
if (is.null(dim(x))) x = t(data.frame(x))
print(x[,1])
}
x
但是,如果我们在其主体中启用其他过滤器bar()
,可能会将其再次转换为向量,那么问题会复杂得多。然后对于每个过滤,我们应该检查并执行相同的操作以确保我们拥有的仍然是一张表。
其他问题是:如果矩阵的过滤部分只是单个行/列,则缺少行名和/或列名。它需要进一步操作以将过滤部分重新组织为矩阵,检索原始行/列名称并将它们分配给结果矩阵。
问题是:如何简单地将适用于表的函数转换为通用函数,如果输入恰好是向量,它仍然有效?