我想从R中的3:50开始制作一个向量,看起来像
我想在for循环中使用for循环,但它没有完成我想要的操作。
f <- c()
for (i in 3:50) {
for(j in 1:2) {
f = c(f, i)
}
}
怎么了
最佳答案
使用rep
函数,以及使用回收逻辑索引...[c(TRUE, FALSE, TRUE, TRUE)]
的可能性
rep(3:50, each = 2)[c(TRUE, FALSE, TRUE, TRUE)]
## [1] 3 4 4 5 6 6 7 8 8 9 10 10 11 12 12 13 14 14 15 16 16 17 18 18 19
## [26] 20 20 21 22 22 23 24 24 25 26 26 27 28 28 29 30 30 31 32 32 33 34 34 35 36
## [51] 36 37 38 38 39 40 40 41 42 42 43 44 44 45 46 46 47 48 48 49 50 50
如果使用逻辑向量(
TRUE
/FALSE
)作为索引(在[
]
内部),则TRUE
会导致选择相应的元素,而FALSE
会导致遗漏。如果逻辑索引向量(c(TRUE, FALSE, TRUE, TRUE)
)短于索引向量(在您的情况下为rep(3:50, each = 2)
),那么索引向量将被重新定型。还有一个注意事项:每当您使用R代码时,例如
x = c(x, something)
或者
x = rbind(x, something)
或类似的东西,您在R中采用了类似C的编程风格。这使您的代码异常复杂,如果使用大型(例如200MB +)数据集,可能会导致性能降低和内存不足的问题。 R旨在为您省去那些对数据结构进行底层修改的麻烦。
在R Inferno(第2圈:生长的物体)中阅读有关the嘴及其惩罚的更多信息。
关于用for循环在向量中重复元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48840257/