R中有两个相互交换的循环,结果很奇怪

use*_*492 4 loops r

我尝试用R计算不同参数值a和b的东西,其中我的参数b总是应该小于或等于a.要做到这一点,我做两个循环,我改变a(从0到4)然后b从0到a,但R得到我奇怪的b值.

v=c()
L<-0
for (a in seq(0, 4, length.out=41)){
  for (b in seq(0, a, length.out=(10*a+1))){
    L<-L+1
    v[L]<-b
  }
}
v
Run Code Online (Sandbox Code Playgroud)

在我看来,b应始终从0步到0.1步.但它并不总是,有时步数较小,如矢量v的位置23-28(例如)中所见.有没有人知道为什么会这样.我找不到错误!谢谢!

Pey*_*ton 6

seq有关值length.out将被四舍五入的注释的文档.由于a是数字,因此与某些错误相关联,因此可能会获得比您预期更长的一个长度,从而为您提供奇怪的输出.

for (a in seq(0, 4, length.out=41)[1:7]){
  print(paste(as.integer(10*a+1), ceiling(10*a+1)))
}
# [1] "1 1"
# [1] "2 2"
# [1] "3 3"
# [1] "4 4"
# [1] "5 5"
# [1] "6 6"
# [1] "7 8"
Run Code Online (Sandbox Code Playgroud)

注意最后一行:你得到8而不是7.

要解决此问题,请尝试通过舍入将长度转换为整数:

for (b in seq(0, a, length.out=round(10*a+1))){
Run Code Online (Sandbox Code Playgroud)