Dut*_*hke 0 for-loop r concatenation
我想要一个带有 excel 字母的向量:c(A, B, C, ... Z, AA, AB, ... AZ, BA, ...)。
我的尝试是这样的:
excel_letters <- LETTERS
for(n in length(LETTERS)){
excel_letters <- c(excel_letters, paste0(LETTERS[n], LETTERS))
}
Run Code Online (Sandbox Code Playgroud)
由于我在迭代循环之前在循环外部定义 excel_letters,因此我期望获得所需的输出。相反,我只得到:
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "ZA" "ZB" "ZC"
[30] "ZD" "ZE" "ZF" "ZG" "ZH" "ZI" "ZJ" "ZK" "ZL" "ZM" "ZN" "ZO" "ZP" "ZQ" "ZR" "ZS" "ZT" "ZU" "ZV" "ZW" "ZX" "ZY" "ZZ"
Run Code Online (Sandbox Code Playgroud)
这基本上是字母加上最后一次迭代。
我在这里缺少什么?
我知道还有其他方法可以解决此问题,但我想知道为什么这不起作用。
如前所述,length(LETTERS)是单个元素,因此for (n in length(LETTERS))迭代单个值。
一般来说,您很少需要迭代索引\xc2\xa0\xe2\x80\x94,它\xe2\x80\x99s更容易直接迭代向量中的值:
\nfor (letter in LETTERS) \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n在极少数情况下,您确实需要迭代向量的索引(这里不需要\xe2\x80\x99t),请使用以下模式
\nfor (i in seq_along(the_vector))\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa6 但对于您的用例,更好的(更短,更具表现力,更高效)解决方案完全避免了循环,有利于直接构造:
\nexcel_letters <- paste0(rep(c("", LETTERS), each = length(LETTERS)), LETTERS)\nRun Code Online (Sandbox Code Playgroud)\n您编写 R 的次数越多,您就越会发现矢量化和定制算法如何帮助您避免循环。
\n