Simple loop for changing file names doesn't work
我写了下面的循环将用户输入(可以是一个数字,两个数字或三个数字)转换为所有三个数字;这样,输入矢量[7、8、9、10、11]将转换为输出矢量[007、008、009、010、011]。这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 | zeroes <- function(id){ for(i in 1:length(id)){ if(id[i] <= 9){ id[i] <- paste("00", id[i], sep ="") } else if(id[i] >= 10 && id[i] <= 99){ id[i] <- paste("0", id[i], sep ="") } } id } |
对于输入向量
1 | id <- 50:100 |
我得到以下输出:
1 2 3 4 5 6 | [1]"050" "0051" "0052" "0053" "0054" "0055" "0056" "0057" "0058" "0059" [11]"0060" "0061" "0062" "0063" "0064" "0065" "0066" "0067" "0068" "0069" [21]"0070" "0071" "0072" "0073" "0074" "0075" "0076" "0077" "0078" "0079" [31]"0080" "0081" "0082" "0083" "0084" "0085" "0086" "0087" "0088" "0089" [41]"090" "091" "092" "093" "094" "095" "096" "097" "098" "099" [51]"00100" |
因此,对于id [1]来说,该函数正常工作,然后出现了以下数字的错误,但是对于id [41:50],我又得到了正确的输出。我无法弄清楚为什么会这样,以及我做错了什么。任何建议都受到热烈欢迎。
这是因为当您在函数中的
所以
1 2 | > zeroes(51) [1]"051" |
但如果第二项失败,则失败:
1 2 | > zeroes(c(50,51)) [1]"050" "0051" |
因为当您的循环进入51时,它实际上是用引号引起来的" 51"。失败了:
1 2 | > zeroes("51") [1]"0051" |
因为" 51"小于9:
1 2 | >"51"<9 [1] TRUE |
因为R将9转换为" 9",然后进行字符比较,所以在整理序列字母表中只有" 5"与" 9"进行比较,而" 5"在" 9"之前。 >
其他语言可能会将字符" 51"转换为数字,然后与数字9进行比较,然后说" 51"。<9是False,但是R这样做。
课程:不要覆盖您的输入向量! (并使用