【发布时间】:2023-04-10 09:16:01
【问题描述】:
我对 R 很陌生,对 R 编程也很陌生。我有以下问题及其答案(不是我的)。我试图理解为什么有些值,从哪里获得,为什么使用它们等等。
问题:使用 for 循环制作向量 3 5 7 9 11 13 15 17。开始 用 x=numeric() 并用 for 循环填充这个向量
我知道我必须创建 x=numeric() 以便我可以用从循环获得的结果填充它。
一位同学的回答是:
> 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 循环时,我被困在这里:
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()
}
相信我,当我告诉您时,我已经阅读了对这里问题的一些回复,例如在 How to make a vector using a for loop 中,以及关于 for 循环的页面和页面,但无法真正弄清楚如何解决这些(和其他)问题。
我再说一遍,我很新,所以我很难理解它。任何帮助将不胜感激。
【问题讨论】:
-
谁在教你,请从 SO r-tag 社区告诉他们,请停止教如何在循环中生长对象。
-
还告诉他们阅读The R Inferno 以了解@Roland 建议“停止教授如何在循环中生长对象”的原因。
-
就此而言,请告诉您的同学,将条件
if(i == 1)放入循环中是很疯狂的。如果向量的第一个值不遵循余数的模式,请在循环外初始化并执行for(i = 2:n) -
@CarlWitthoft 那么我们在什么时候教他们使用
1:length(y)来获取一组要迭代的索引是一个坏主意(即当y的长度可能为0 时)? (对于未来的读者,seq_along(y)更安全,因为即使y的长度为 0,它也会给出预期的结果。) -
@BrianDiggs 好吧,从哲学上讲,我更喜欢在使用
y做任何事情之前检查length(y)是否有用:-)