我想从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/

10-14 19:51
查看更多