我正在尝试定义分段函数,并且对单个输入也可以正常工作,但是当我尝试使用向量输入时,出现“条件的长度> 1并且仅将使用第一个元素”错误因为据我所知,它将标量传递给向量。
ex <- function(x){
if (x < -1) {
y <- (-2 * x) -2
return(y)
}
else if (-1 <= x & x <= 1) {
y <- 0
return(y)
}
else if (1 < x){
y <- (x * x) - 1
return(y)
}
}
谁能帮助我使用Apply函数来解决此问题?我想避免使用ifelse。
如您所知,您的函数仅针对标量输入而不是向量编写。所以,
ex(10)
ex(12)
作品。但,
ex(c(10, 12))
没有。(实际上,在这种情况下,它会给出预期的输出并带有警告)
不更改功能的一种方法是使用 sapply
sapply(c(10, 12), ex)
或者您可以更改功能并使用ifelse
适用于矢量的功能
ex1 <- function(x){
ifelse(x < -1,(-2 * x) -2,
ifelse(-1 <= x & x <= 1, 0,
ifelse(1 < x,(x * x) - 1,NA)))
}
ex1(c(10, 12))
或搭配 dplyr::case_when
ex2 <- function(x){
dplyr::case_when(x < -1 ~ (-2 * x) -2,
-1 <= x & x <= 1 ~ 0,
1 < x ~ (x * x) - 1)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句