【问题标题】:How to write a function for and for loop with embedded if else statement?如何使用嵌入的 if else 语句编写 for 和 for 循环的函数?
【发布时间】:2018-03-16 03:40:37
【问题描述】:

我刚刚开始在我正在学习的课程中使用 R,它要求整数值 > 0(参数 1),它将值 75 乘以集合乘数(参数 2),其他元素乘以不同的乘数(参数 3)。

我已经有了之前的 h 和 s 值:

h=sample(1:100,40)

s=c()
 for(i in 1:100){if(h[i]<25){s[i]<-h[i]*10}
else if(h[i]>75){s[i]<-h[i]*10}
else{s[i]<-h[i]*0.1}}
Error in if (h[i] < 25) { : missing value where TRUE/FALSE needed

错误消息显示在上面的 for 循环中,但如果我忽略它,我仍然会得到答案。我想要但不会在函数中工作。

fun2<-function(x=s,arg1,arg2,arg3)
{w<-for(i in 1:100){if(h[i]>0){s[i]<-h[i]*arg1}else if(h[i]<25){s[i]<-
h[i]*arg2}
else if(h[i]>75){s[i]<-h[i]*arg2}
else{s[i]<-h[i]*arg3}}
return(w)}

fun2(arg1=10,arg2=3,arg3=10)
Error in if (h[i] > 0) { : missing value where TRUE/FALSE needed

我不确定在等式中将真/假陈述放在哪里。

【问题讨论】:

    标签: r function for-loop if-statement


    【解决方案1】:

    看看length(h)

    您会看到您尝试循环超过 100 个索引,而只有 40 个元素。如果你用h = sample(1:100,100) 替换你的第一行,你的第一个代码应该可以工作。

    至于您的第二次尝试,您不能将 for 循环分配给变量。在循环之前存储您的变量 w 并分配您正在计算的新值,如下所示。

    fun2<-function(x=s,arg1,arg2,arg3){
      w<-s
      for(i in 1:100){
       if(h[i]>0){
        w[i]<-h[i]*arg1
       }
       ... # some if statement
     return(w)
    }
    

    附带说明,您的函数不会为您提供您正在寻找的结果,因为您的第一个 if 条件会丢弃以下 else if。我会删除第一个 if 块并将下一个替换为 if(h[i] &lt; 25 &amp; h[i]&gt; 0)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      相关资源
      最近更新 更多