我将使用ggplot2
在R上描绘一个连续图库,基于分段函数。
fun1 <- function(x){
ifelse(x<=-2, -1.5*(-x)^2, NA)
}
fun2 <- function(x){
ifelse(x>-2, 6*x-5, NA)
}
gg <- ggplot(data.frame(x = c(-5, 5)),
aes(x = x))+
stat_function(fun = fun1, n=1001)+
stat_function(fun = fun2, n=1001)
print(gg)
这显示了分段函数的正确图形。
但是如果我改变条件稍微不同,这样 ifelse(x<-2, -1.5*(-x)^2, NA)
和ifelse(x>=-2, 6*x-5, NA)
,然后图表的第一部分突然无法正确描绘。
这似乎是ifelse
函数现在总是返回 -6
对于所有值 x
,无论它是否是<=-2
或不。
但是为什么会突然发生这样的变化呢?我尝试使用标准绘图函数描绘连续曲线,但仍然得到相同的结果......
最佳答案
这就是当您在运算符之间不留空格时会发生的情况。除了降低代码的可读性之外,有时还会使解析器感到困惑。在您的情况下,解析器解释 x<-2
如x <- 2
,即“将 2 分配给 x”,而不是 x < -2
,即“x 小于负 2”。
当您使用分配作为 ifelse
中的第一个参数时,它将评估赋值的“真实性”,并且由于 2 是正整数,因此它将始终评估为 true。由于在计算该子句时,x 为 2,因此对于该函数的所有输入值,您的输出将为 -1.5 * (-2)^2
,即-6。
如果您使用空格(或括号),则不会发生这种情况:
fun1 <- function(x){
ifelse(x < -2, -1.5*(-x)^2, NA)
}
fun2 <- function(x){
ifelse(x > -2, 6*x-5, NA)
}
gg <- ggplot(data.frame(x = c(-5, 5)),
aes(x = x))+
stat_function(fun = fun1, n=1001)+
stat_function(fun = fun2, n=1001)
print(gg)
关于r - 如果我在分段函数(ggplot2)上从 >= 更改为 >,为什么我的连续图会突然发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74172562/