如果您对具有字符和数字列的 data.frame 上的行使用 apply,则 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"
为什么要多出空格?
在 data.frame 上使用 apply 时,它们可能会产生意想不到的结果:
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 添加的额外空格有用的情况?