r 应用功能垫空格来匹配字符长度

r apply function pads spaces to match character lengths

我正在使用 apply 从数据框生成字符串。

例如:

df2 <- data.frame(a=c(1:3), b=c(9:11))
apply(df2, 1, function(row) paste0("hello", row['a']))
apply(df2, 1, function(row) paste0("hello", row['b']))

如我所料并生成

[1] "hello1" "hello2" "hello3"
[1] "hello9" "hello10" "hello11"

但是,如果我有

df <- data.frame(a=c(1:3), b=c(9:11), c=c("1", "2", "3"))
apply(df, 1, function(row) paste0("hello", row['a']))
apply(df, 1, function(row) paste0("hello", row['b']))

输出是

[1] "hello1" "hello2" "hello3"
[1] "hello 9" "hello10" "hello11"

任何人都可以解释为什么在第二种情况下我得到一个填充 space 以使所有字符串的长度相同吗?我可以使用 gsub 解决这个问题,但我想更好地理解为什么会发生这种情况

发生这种情况是因为 apply 将您的 data.frame 转换为 matrix。看看将 df 强制转换为矩阵时会发生什么:

 as.matrix(df)
     a   b    c  
[1,] "1" " 9" "1"
[2,] "2" "10" "2"
[3,] "3" "11" "3"

请注意,它被强制转换为字符矩阵,并且在 " 9" 上包含了额外的 space。

您不需要应用函数:

 paste0("hello", df[["a"]])
[1] "hello1" "hello2" "hello3"

paste0("hello", df[["b"]])
[1] "hello9"  "hello10" "hello11"