【问题标题】:R programming language LOOPSR 编程语言 LOOPS
【发布时间】:2016-09-19 09:32:51
【问题描述】:
y <- vector()
i <- 5
while((2<3)<i){
y[i] <- "Hello World!"
i <- i-1 }
y

所以我不明白当while((2&lt;3)&lt;i) 是这种情况时while 循环如何工作,2&lt;3 在所有条件下都是正确的,我最终得到TRUE&lt;i,这是什么意思?还是我想错了?

我只是不知道 while 循环的条件如何工作,如果我知道了,我相信我会解决的。

还有一个问题:

xxx <- function(vec){
    n <- length(vec)
}
for(i in 1:n){
      x <- vec[i]
       if (vec[i]<x){
               x <- vec[i]
 }
 } return(x)

这个xxx函数是假设输出函数的最小值吗?好吧,我明白了,但是如何? 当我们进入循环时,我们首先执行 x&lt;- vec[i] 而不这样做,我们不能将 if 语句传递给下一个命令,对吗?因此,由于我们早先执行了x &lt;- vec[i],因此如果命令可能自x==vec[i] 以来一直不起作用。

请帮助大家,因为我明天有考试:(

【问题讨论】:

  • 我建议你检查你的代码并仔细注释每一行的作用。我还建议你谷歌一下如何使用while循环以及如何在R中定义函数——网上有很多很好的例子和解释,你真的不需要人在这里为你做。最后,你缺乏一个明确定义的问题或问题。根据您的帖子,我不知道您要使用 while 循环来完成什么,并且您困惑地问为什么 xxx 函数做了一些它没有做的事情。您可以编辑您的帖子以展示研究成果和明确的问题吗?

标签: r loops for-loop


【解决方案1】:

1) ?Comparison 表示,指的是任何比较运算符的两个参数,例如&lt;

如果两个参数是不同类型的原子向量,一个是 强制到另一个的类型,(递减的)优先顺序 是字符、复数、数字、整数、逻辑和原始。

所以在这种情况下,我们有一个逻辑参数和一个数字参数,因此逻辑参数被强制转换为数字(其中FALSE 转换为0TRUE 转换为1)。因此(2&lt;3)&lt;5TRUE &lt; 5 相同,1 &lt; 5TRUE 相同:

(2<3)<5
## [1] TRUE

2) 对于xxx,您可能想要这个:

xxx <- function(vec) {
    x <- Inf
    for(i in seq_along(vec)) if (vec[i] < x) x <- vec[i]
    x
}

主体中的第一个语句将Inf 分配给x 在主体中的第二个语句seq_along(vec)12、...、length(vec),因此for 循环迭代@987654340 @ over 1, 2, ..., length(vec) 如果vec[i] 小于x,则每次迭代将x 替换为vec[i]。请注意,如果 vec 的长度为零,则循环根本不会运行,因为 seq_along(vec) 的长度为零。

测试一下:

> xxx(1:3)
[1] 1
> xxx(3:1)
[1] 1
> xxx(numeric(0)) # zero length input
Inf

当然,R 已经有 min 函数,它可以做同样的事情。

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 2014-09-11
    • 2011-10-05
    • 2021-10-10
    • 2011-06-28
    • 1970-01-01
    • 2017-05-13
    • 2012-07-27
    相关资源
    最近更新 更多