我是R
的新手,我们有一个小任务,我正在努力。这就是我到目前为止所做的,我不明白为什么代码不工作。
Max = 0
A = c(10:1,20:11)
for(i in A){if(A>i){A = Max}}
出了什么问题,有人能简单解释一下原因吗?
虽然我同意所有的评论,但问题
出了什么问题,有人能简单解释一下原因吗?
仍未应答。
为了可读性,我重新格式化了代码:
A <- c(10:1, 20:11)
Max <- 0
for (i in A) {
if (A > i) {
A <- Max
}
}
初始赋值后,A
是一个包含数字
A
[1] 10 9 8 7 6 5 4 3 2 1 20 19 18 17 16 15 14 13 12 11
如果我们运行for
循环,我们得到:
Warning messages:
1: In if (A > i) { :
the condition has length > 1 and only the first element will be used
2: In if (A > i) { :
the condition has length > 1 and only the first element will be used
遗憾的是被op遗漏了。
A
现在只保存一个值
A
[1] 0
显然不是A
的最大值。
在for
循环的第一次迭代中,i
被赋值为A
中的第一个值10。if
子句的条件将包含20个元素的整个向量A
与只包含一个值的i
进行比较,而if
子句只能做出一个决定。这是由第一条警告信息发出的信号。
if
子句只使用第一次比较的结果,即比较A
和i
的第一个元素(10>10 ),即FALSE
。循环继续进行下一次迭代。
在for
循环的第二次迭代中,i
被赋值为A
中的第二个值9。再次发出警告消息,if
子句只使用第一次比较的结果,即将A
的第一个元素与i
进行比较。但现在i
是9,(10> 9)是TRUE
。因此,执行if
子句,并将A
设置为Max
的值,即0。
从第三次迭代开始,A
只包含一个单一的值0,这个值永远不会再改变。而且,没有更多的警告,因为A > i
只返回一个结果。