我很新的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循环,使一个载体 ,再加上网页和有关循环页,却无法真正弄清楚如何解决这些(和其他)问题。
我再说一遍,我是很新的,所以我努力试图理解它。 任何帮助将非常感激。
首先,我会标注的循环怎么回答环路正在做什么。
# 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循环每次迭代做的想法。
这是不是故意的答案,因为有更好的方法来解决不是一个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到最长矢量的长度精确地匹配在数学或逻辑表达式。