首页 > 解决方案 > R中的分段函数

问题描述

我正在尝试制作分段功能。这是一个非常基本的。我希望 y 是一个值列表(最好不仅仅是整数列表,而是将来的实数列表,如 (1.34, 20.92))。我如何制作分段函数?

y <- 1:10
if (y < 2){
  print("CAN'T COMPUTE")
} else if (y >= 2 & y < 6){
  print(y^2)
} else {
  print(y * 2)
}

标签: rmath

解决方案


这是一些基本的 R 方法。我们使用 NA 代替字符串来生成数字向量结果。第一个使用嵌套的 ifelse。第二个使用单个 ifelse 在 NA 和其他值之间进行选择,并使用公式计算其他值。第三个计算需要结果的哪条腿(1、2 或 3),然后使用 switch 选择那条腿。第四个是三个的变体,它使用 findInterval 来计算腿数。

ifelse(y < 2, NA, ifelse(y < 6, y^2, 2*y))
## [1] NA  4  9 16 25 12 14 16 18 20

ifelse(y < 2, NA, (y < 6) * y^2 + (y >= 6) * 2*y)
## [1] NA  4  9 16 25 12 14 16 18 20

mapply(switch, 1 + (y >= 2) + (y >= 6), NA, y^2, 2*y)
## [1] NA  4  9 16 25 12 14 16 18 20

mapply(switch, findInterval(y, c(-Inf, 2, 6, Inf), left.open = FALSE), NA, y^2, 2*y)
## [1] NA  4  9 16 25 12 14 16 18 20

推荐阅读