R中的分段函数帮助

问题描述

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

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

解决方法

像下面这样的分段函数?

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

这样

> pwfun(c(-2,0.5,3))
[1] -6  0  8
,
pwfun <- function(x) ifelse(x < -1,(x * x) -2,x**2 - 1))


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

上面对ThomasIsCoding答案的编辑可以为您提供所需的内容,但我会使用这种方法,因为它可以更好地传达其意图:

library(dplyr)

df <- data.frame(x = c(-2,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,3))

pwfunc(data)

并获得:

enter image description here