【问题标题】:Piecewise Function Help in RR中的分段函数帮助
【发布时间】:2020-10-04 22:04:41
【问题描述】:

对于一个类,我必须创建一个按以下方式定义的分段函数:

2x-2   , x < -1
0      , -1 <= X <= 1
x^(2)-1, x > 1

我尝试了一个 ifelse 序列,但我似乎无法让它工作。我也尝试过 if、elseif、else 序列,但这似乎只使用第一个函数来计算答案。 最终目标是:

    pwfun(c(-2, 0.5, 3))
    2 0 8

【问题讨论】:

  • 嗨,欢迎来到堆栈溢出。也许您可以包含一个您尝试过的代码示例?
  • 你不需要ifelse这个:pwfun &lt;- function(x) (2 * x - 2) * (x &lt; -1) + (x ^ 2 - 1) * (x &gt; 1)

标签: r piecewise


【解决方案1】:

像下面这样的分段函数?

pwfun <- function(x) ifelse(x < -1, 2 * x - 2, ifelse(x <= 1, 0, x**2 - 1))

这样

> pwfun(c(-2, 0.5, 3))
[1] -6  0  8

【讨论】:

    【解决方案2】:
    pwfun <- function(x) ifelse(x < -1, (x * x) -2, ifelse(x <= 1, 0, x**2 - 1))
    
    
    > pwfun(c(-2, 0.5, 3))
    [1] -2  0  8
    

    上面对 ThomasIsCoding 答案的编辑给了你想要的东西,但我会使用这种方法,因为它可以更好地传达它的意图:

    library(dplyr)
    
    df <- data.frame(x = c(-2, 0.5, 3))
    
    pwfunc <- function(data){
        data %>%
            mutate(y = 
                case_when(x < -1 ~ -2,
                          x > 0 & x <= 1 ~ 0,
                          TRUE ~ x**2 - 1)) ## TRUE in a case_when basically
                                            ## means "everything that isnt caught by my specified conditions
                                            ## becomes..." so it works like the "else" clause
    }
    

    然后在你的数据上调用函数:

    df <- data.frame(x = c(-2, 0.5, 3))
    
    pwfunc(data)
    
    

    得到:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      相关资源
      最近更新 更多