R Сохранять имена столбцов и строк при использовании sapply на матрице. - PullRequest
3 голосов
/ 25 сентября 2019

Уже был задан вопрос о том, как хранить имена столбцов в матрице при применении apply, sapply и т. Д. здесь .Но я не нашел, как сохранить в столбце И имена строк матрицы.

Ниже приведен пример:

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)

Заранее спасибо: -)

Ответы [ 2 ]

4 голосов
/ 25 сентября 2019

Мы можем обернуть ваше приложение в пользовательскую функцию.

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
1 голос
/ 25 сентября 2019

Если вы переназначаете, используя [], имена сохраняются.К сожалению, это полезно только тогда, когда вы не хотите создавать новую матрицу, а также не хотите менять класс элементов (например, с символьного на числовой, как в этом примере)

mat[] <- apply(mat,  2,  function(x) 1 + as.numeric(paste(x)))
mat
#      col1 col2
# row1 "2"  "4" 
# row2 "3"  "5" 
...