说明对R中循环(Explaining a for loop in R)

2019-10-19 05:42发布

我很新的R,以及更多新的节目在R.我有以下问题及其答案(这是不是我的)。 我试图理解为什么一些值,从那里得到,为什么他们被使用等

问题:使载体3 5 7 9 11 13 15 17与一个for循环。 其中x =数字(开始),并用在for循环填补这个矢量

我知道我要创建X =数值(),所以我可以从循环得到的结果填充它。

从同学的回答是:

> x <- numeric()
> for(i in 1:8){   
      if(i==1){                ## Why ==1 and not 0, or any other value   
          x[i] <- 3              
      }else{   
          x[i] <- x[i-1]+2  ### And why i-1   
     }

我有在这样的问题类似的问题:

使一个for循环,增加了一个矢量到所述第一的第二元件,减去从结果的第三个元素,再次等添加第四对于该矢量的整个长度上

到目前为止,我创建载体和空载体

> y = c(5, 10, 15, 20, 25, 30)
> answer <- 0 

然后,当我试图为循环做,我深陷其中:

for(i in 1:length(y)){
if(i...){ ### ==1? ==0?
    answer = y[i]   ###and here I really don't know how to continue. 
}else if()
}

相信我,当我告诉你,我已经看了几答复的问题在这里,就像在如何使用for循环,使一个载体 ,再加上网页和有关循环页,却无法真正弄清楚如何解决这些(和其他)问题。
我再说一遍,我是很新的,所以我努力试图理解它。 任何帮助将非常感激。

Answer 1:

首先,我会标注的循环怎么回答环路正在做什么。

# Initialize the vector
x <- numeric()
for(i in 1:8){   
  # Initialize the first element of the vector, x[1].  Remember, R indexes start at 1, not 0.
  if(i==1){                
    x[i] <- 3              
  } else {   
    # Define each additional element in terms of the previous one (x[i - 1]
    # is the element of x before the current one.
    x[i] <- x[i-1]+2  ### And why i-1   
  }
} 

使用循环和它的增长(如状态指示)一个更好的解决办法是这样的:

x <- numeric()
for(i in 1:8){
  x[i] <- 2 * i + 1
}

这仍然是不该做的事,因为不断增长的循环中有一个向量是慢的一个好办法。 为了解决这个问题,你可以通过预先分配告诉矢量numeric你想要的向量的长度:

x <- numeric(8)

要解决这将是最好的方法:

2 * 1:8 + 1

使用矢量操作。

为了帮助您解决其他问题,我建议写出来的循环为表的每一个步骤。 例如,对于我的解决方案,该表会

i | x[i]
------------------
1 | 2 * 1 + 1 = 3
2 | 2 * 2 + 1 = 5

等等。 这会给你什么样的for循环每次迭代做的想法。



Answer 2:

这是不是故意的答案,因为有更好的方法来解决不是一个for循环交替的迹象求和问题。 我想有可能是在得到舒适的for循环,但在R上的量化方法应该汲取,以及价值。 R有“循环论证”的许多行动,包括“*”(乘)操作:查看:

 (1:10)*c(1,-1)

然后取一个任意向量,说vec和尝试:

sum( vec*c(1,-1) )

看着这一结果后,更正确的答案应该是:

vvec[1] + sum( vec[-1]*c(1,-1) )

其中有说明的r负索引的教育优势。 在文档中查找“的说法回收”。 较短的对象被自动地duplicatied /三重/然而-许多需要的-cated到最长矢量的长度精确地匹配在数学或逻辑表达式。



文章来源: Explaining a for loop in R