在R中正确翻译`for(int i = 1; i< = size; i ++)`(case`s size< 1`)

时间:2017-10-13 11:30:14

标签: r loops for-loop

我曾经在R中编写for循环

for(i in 1:size) { ... }

我觉得它相当于

for(int i = 1; i <= size; i++) { ... }

但我刚刚意识到,如果size == 0 R仍然进入循环,因为1:size = [1 0]因此我的代码完全错误。

那么,我在上面编写的C for循环的真正标准方式是什么,如果size < 1程序没有进入循环?

3 个答案:

答案 0 :(得分:2)

假设size是您对象的某种尺寸,例如length(vec)nrow(df),您可以使用seq_along,如下所示:

x = NULL
for (i in seq_along(x)) print(x[i])

答案 1 :(得分:2)

如果size最初是矢量的长度,则标准方式是

spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://SDCHDPMAST1:8111/data1/spark-event
spark.history.fs.logDirectory    hdfs://SDCHDPMAST1:8111/data1/spark-event
spark.yarn.jars                  hdfs://SDCHDPMAST1:8111/user/appuser/spark/share/lib/*.jar
spark.driver.maxResultSize       5G
spark.deploy.zookeeper.url       SDCZKPSRV01

spark.executor.memory                   12G
spark.driver.memory                     10G
spark.executor.heartbeatInterval        60s
spark.network.timeout                   300s

如果myvector的长度为零,则表现正常。所以你甚至可以

for (i in seq_along(myvector)) {...}

但这肯定不会被视为“标准”。

如评论中所述(以及另一个答案),更好的方法是

for (i in seq_along(numeric(size))) {...}

答案 2 :(得分:1)

您可以使用base::seq_len

foo <- 2
bar <- 0

for (i in seq_len(foo)) {print(i)}
[1] 1
[1] 2
# No output
for (i in seq_len(bar)) {print(i)}