我需要写一个表达式来找到A = c(10:1,20:11)范围内的最小值和最大值,使用R中的for循环和if语句



我是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子句只使用第一次比较的结果,即比较Ai的第一个元素(10>10 ),即FALSE。循环继续进行下一次迭代。

for循环的第二次迭代中,i被赋值为A中的第二个值9。再次发出警告消息,if子句只使用第一次比较的结果,即将A的第一个元素与i进行比较。但现在i是9,(10> 9)是TRUE。因此,执行if子句,并将A设置为Max的值,即0。

从第三次迭代开始,A只包含一个单一的值0,这个值永远不会再改变。而且,没有更多的警告,因为A > i只返回一个结果。

最新更新