r - 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)
}
解决方案
这是一些基本的 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
推荐阅读
- visual-studio-2019 - VS2019 中缺少编辑项目选项
- c++ - 分配给元组时使用包扩展的序列点警告
- android - 将物品均匀地分成
- keycloak - SSO 开放 ID | 从一个客户端注销应该注销其他客户端
- apache-flink - Flink metric `flink_taskmanager_Status_JVM_CPU_Load{}` 在 Grafana Dashboard 中不准确
- logstash - Logstash 基于多路径的多索引
- android - android gradle插件——离线安装
- angular - 升级到 Angular 12 后出现错误:NGCC 失败
- linux - 我们可以为 linux 内核模块(ko 文件)禁用 aslr
- python - Elasticsearch 如何搜索文档?ES中如何自定义预处理流水线和评分功能?