apply中的数字填充空格

时间:2014-08-18 09:28:06

标签: r

我想根据数据框中的两个变量创建文件夹名称,这里有些错误......

head(clustering)
  line  x  y   qerror
1  200 15 19 1.118677
2  201 11 19 1.038482
3  202  0  6 1.238026
4  203  0 18 1.321878
5  204  0 12 1.204173
6  205  5  0 1.394773
str(clustering)
'data.frame':   3406 obs. of  4 variables:
 $ line  : Factor w/ 3406 levels "1001","1003",..: 814 822 831 841 847 858 891 ...
 $ x     : num  15 11 0 0 0 5 16 8 1 0 ...
 $ y     : num  19 19 6 18 12 0 14 19 17 18 ...
 $ qerror: num  1.12 1.04 1.24 1.32 1.2 ...

当我尝试使用x和y列创建文件夹名称时,我会执行以下操作:

apply(head(clustering),1,function(x){paste0('x',x[2],'_by_y',x[3])})
           1            2            3            4            5            6 
"x15_by_y19" "x11_by_y19" "x 0_by_y 6" "x 0_by_y18" "x 0_by_y12" "x 5_by_y 0" 

正如你所看到的,如果值小于10,则x和y会得到一个额外的空间。但是当我使用它而不应用时,它似乎可以工作

paste0('x',clustering[3,2],'_by_y',clustering[3,3])
[1] "x0_by_y6"

有人有想法,为什么有空格?

1 个答案:

答案 0 :(得分:1)

这是因为来自apply的以下几行:

if (!dl) 
  stop("dim(X) must have a positive length")
if (is.object(X)) 
  X <- if (dl == 2L) 
    as.matrix(X)
else as.array(X)

as.matrix来电format,而format + as.matrix有时会做出意想不到的事情。请参阅as.matrix中的“详细信息”部分。 format帮助页面还指出“字符串用空格填充到最宽的显示宽度。”

以下是一个演示,显示format对您已识别的行为负责:

lapply(mydf, format)
# $line
# [1] "200" "201" "202" "203" "204" "205"
# 
# $x
# [1] "15" "11" " 0" " 0" " 0" " 5"
# 
# $y
# [1] "19" "19" " 6" "18" "12" " 0"
# 
# $qerror
# [1] "1.118677" "1.038482" "1.238026" "1.321878" "1.204173" "1.394773"