【问题标题】:Nested IfElse statements in R not returning values as expectedR中的嵌套IfElse语句未按预期返回值
【发布时间】:2021-10-02 10:53:27
【问题描述】:

我正在尝试在 R 中编写以下代码。我认为它需要一系列嵌套的 ifelse 语句。我可以让我的代码工作,但它似乎不能正常工作。

我希望能够根据这些规则对一个范围进行分类,其中值 a = 0。

这是我的代码。

   x <- 105     # Just a test value, I substitute numbers to test the code
   a <- 1
   b <- 40
   c <- 60
   d <- 100

    alpha <- if(x <= a){
       (alpha == 0)
    } else if(x >= a & x < b){
      (1-(x - a)/(b - a)) * (pi/2)
    } else if (x >= b & x < c){
      (alpha == 1)
    } else if(x >= c & x < d){
      ((x - c)/(d - c)) * (pi/2)
    } else if(x >= d){
      (alpha == 0)
    }

    newvalue <- if (alpha == 0){
      newvalue == 0
    } else if (alpha == 1){
      newvalue == 1
    } else {
      cos(alpha)^2}

我认为我嵌套语句的方式可能有问题?我查看了其他示例,但看不出我遇到了什么问题?

【问题讨论】:

  • 您正在使用比较器 == 而您可能需要赋值运算符 &lt;-= 。无论如何,您已经将输出分配给“alpha”,因此您可以将 alpha==0 替换为 0,如 `alpha

标签: r fuzzy-logic


【解决方案1】:

dplyr::case_when 在多个嵌套 ifelse 的这些情况下使事情变得更加清晰:

library(dplyr)

alpha <- case_when(x<a ~ 0,
                  x>=a & x<b ~ (1-(x - a)/(b - a)) * (pi/2)),
                  x>=b & x< c ~ 1,
                  x>=c & x<d ~ ((x - c)/(d - c)) * (pi/2)),
                  x>=d ~ 0)

newvalue <- case_when(alpha==0 ~ 0,
                      alpha==1 ~1,
                      TRUE ~ cos(alpha)^2)
                  

【讨论】:

    【解决方案2】:

    试试,

    alpha <- if(x <= a){
      (alpha = 0)
    } else if(x >= a & x < b){
      (1-(x - a)/(b - a)) * (pi/2)
    } else if (x >= b & x < c){
      (alpha = 1)
    } else if(x >= c & x < d){
      ((x - c)/(d - c)) * (pi/2)
    } else if(x >= d){
      (alpha = 0)
    }
    
    newvalue <- if (is.null(alpha) == 0){
      (newvalue = 0)
    } else if (is.null(alpha) == 1){
      (newvalue = 1)
    } else {
      cos(alpha)^2}
    

    【讨论】:

      猜你喜欢
      • 2014-07-12
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多