尝试在R中编写分段函数
我对 R 还很陌生,想写一个分段函数,我的代码不起作用,如果你能帮忙,请评论:
a<-rnorm(1000)
ifelse(0<a & a<=.3,C=sqrt(30*a),NA)
ifelse(.3<a & a<=.7,C=5*a+15/10),NA)
ifelse(.7<a & a<=1,c=8-sqrt(-30*a+30),NA)
谢谢你
回答
三个问题:
- 当直接用作函数调用的参数列表的一部分时
=,它不是赋值运算符,而是命名参数的语法。 - 相反,尝试分配的内部的
ifelse()函数调用的参数列表,分配结果 - 您当前正在执行三种不同的计算。真的,你只想执行一个。要解决此问题,您需要嵌套调用:
c = ifelse(
0 < a & a <= 0.3, sqrt(30 * a),
ifelse(
0.3 < a & a <= 0.7, 5 * a + 15 / 10,
ifelse(0.7 < a & a <= 1, 8 - sqrt(-30 * a + 30), NA)
)
)
但是,这不是很可读。您可以使用case_when()'dplyr' 包来使代码更具可读性:
c = case_when(
0 < a & a <= 0.3 ~ sqrt(30 * a),
0.3 < a & a <= 0.7 ~ 5 * a + 15 / 10
0.7 < a & a <= 1 ~ 8 - sqrt(-30 * a + 30)
TRUE ~ NA
)
这两种解决方案都有一个不幸的副作用,即由于 NaN 值(由计算负数平方根的代码引起)引发警告。有关解决此问题的方法,请参阅G. Grothendieck 的回答。