R在矩阵上使用sapply时保留名称和行名

问题描述 投票:2回答:2

已经问过一个问题,当应用applysapplyhere时如何在矩阵中保持同名。但是我没有找到如何保留矩阵的列AND行名。

下面的例子:

mat = matrix(c(as.character(1:4)), nrow = 2)
colnames(mat) = c( 'col1', 'col2' )
rownames(mat) = c( 'row1', 'row2' )
mat = apply(mat,  2,  function(x) as.numeric(paste(x)))
colnames(mat)
rownames(mat)

提前感谢:-)

r dataframe matrix apply sapply
2个回答
3
投票

我们可以将您的应用程序包装到用户定义的函数中。

mat_fun <- function(m){
  m2 <- apply(m,  2,  function(x) as.numeric(paste(x)))
  colnames(m2) <- colnames(m)
  rownames(m2) <- rownames(m)
  return(m2)
}

mat_fun(mat)
#      col1 col2
# row1    1    3
# row2    2    4

0
投票

如果使用[]重新分配,则保留名称。不幸的是,这仅在您不想创建新矩阵并且也不想更改元素的类时才有用(例如,在本示例中从字符更改为数字)

mat[] <- apply(mat,  2,  function(x) as.numeric(paste(x)))
mat
#      col1 col2
# row1 "1"  "3" 
# row2 "2"  "4" 
© www.soinside.com 2019 - 2024. All rights reserved.