Почему as.matrix добавляет дополнительные пробелы при преобразовании чисел в символы?

Если вы используете команду «Применить к строкам» в data.frame с символьными и числовыми столбцами, «apply» использует as.matrix внутри, чтобы преобразовать data.frame только в символы. Но если числовой столбец состоит из чисел разной длины, as.matrix добавляет пробелы для соответствия наибольшему / «наибольшему» числу.

Пример:

df <- data.frame(id1=c(rep("a",3)),id2=c(100,90,8), stringsAsFactors = FALSE) 
df
##   id1 id2
## 1   a 100
## 2   a  90
## 3   a   8
as.matrix(df)
##      id1 id2  
## [1,] "a" "100"
## [2,] "a" " 90"
## [3,] "a" "  8"

Я бы ожидал, что результат будет:

     id1 id2  
[1,] "a" "100"
[2,] "a" "90"
[3,] "a" "8"

Почему лишние пробелы?

Они могут создавать неожиданные результаты при использовании apply на data.frame:

myfunc <- function(row){
  paste(row[1], row[2], sep = "")
}
> apply(df, 1, myfunc)
[1] "a100" "a 90" "a  8"
> 

Пока зацикливание дает ожидаемый результат.

> for (i in 1:nrow(df)){
  print(myfunc(df[i,]))
}
[1] "a100"
[1] "a90"
[1] "a8"

а также

> paste(df[,1], df[,2], sep = "")
[1] "a100" "a90"  "a8"  

Есть ли ситуации, когда дополнительные пробелы, добавляемые с помощью as.matrix, полезны?

Ответы на вопрос(5)

Ваш ответ на вопрос