我想根据数据框中的两个变量创建文件夹名称,这里有些错误......
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"
有人有想法,为什么有空格?
答案 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"