我曾经在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
程序没有进入循环?
答案 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)}