我想使用 apply 来遍历矩阵的行,并且我想在我的函数中使用当前行的行名。看来您不能使用rownames
, colnames
,dimnames
或names
直接在函数内部。我知道我可能可以根据这个问题中的信息创建一个解决方法。
但我的问题是如何apply
在它的第一个参数中处理数组的行名和列名,以及如何将名称分配给在调用的函数内创建的对象apply
?这似乎有点不一致,我希望通过下面的例子来说明。设计成这样是有原因的吗?
# Toy data
m <- matrix( runif(9) , nrow = 3 )
rownames(m) <- LETTERS[1:3]
colnames(m) <- letters[1:3]
m
a b c
A 0.5092062 0.3786139 0.120436569
B 0.7563015 0.7127949 0.003358308
C 0.8794197 0.3059068 0.985197273
# These return NULL
apply( m , 1 , FUN = function(x){ rownames(x) } )
NULL
apply( m , 1 , FUN = function(x){ colnames(x) } )
NULL
apply( m , 1 , FUN = function(x){ dimnames(x) } )
NULL
# But...
apply( m , 1 , FUN = function(x){ names(x) } )
A B C
[1,] "a" "a" "a"
[2,] "b" "b" "b"
[3,] "c" "c" "c"
# This looks like a column-wise matrix of colnames, with the rownames of m as the column names to me
# And further you can get...
n <- apply( m , 1 , FUN = function(x){ names(x) } )
dimnames(n)
[[1]]
NULL
[[2]]
[1] "A" "B" "C"
# But you can't do...
apply( m , 1 , FUN = function(x){ n <- names(x); dimnames(n) } )
NULL
我只是想了解 apply 内部会发生什么?非常感谢。