这是完全正常的行为。您正在对具有命名行的矩阵应用函数。您的函数为每一行返回一个列表,并且这个新列表列表中的每个元素都以相应的行名命名。
这是一个重现您所描述内容的示例:
x <- matrix(1:4, nrow=2)
rownames(x) <- 80:81
myFunc <- function(x)list(a=1, b=2)
xx <- apply(x, 1, myFunc)
xx
这将返回:
$`80`
$`80`$a
[1] 1
$`80`$b
[1] 2
$`81`
$`81`$a
[1] 1
$`81`$b
[1] 2
看一下这个列表的结构:
str(xx)
List of 2
$ 80:List of 2
..$ a: num 1
..$ b: num 2
$ 81:List of 2
..$ a: num 1
..$ b: num 2
要索引第一个元素,只需使用xx[[1]]
:
xx[[1]]
$a
[1] 1
$b
[1] 2
这是您可能想要的猜测......如果您返回一个向量,而不是返回一个列表,那么结果apply
将是一个矩阵:
myFunc <- function(x)c(a=1, b=2)
apply(x, 1, myFunc)
80 81
a 1 1
b 2 2
要获得没有名称的特定行,请执行以下操作:
unname(xx[2, ])
[1] 2 2