r - 使用 for() 将向量传递给 if...else()
问题描述
我试图理解 for 循环和 if...else 函数。通常,应该使用 apply-family 而不是 for 循环,并且大多数 R 函数在任何情况下都是矢量化的。因此,许多使用 for 循环的示例并不是很有帮助。另外,由于 ?for 和 ?if...else 都不起作用(请告诉我如何使它们起作用),我有点迷茫。
来回答我的问题:
1) if...else 不能接受具有多个值的向量。for() 获取给定向量的 i 并将其传递给函数。为什么下面的代码不起作用,或者更好地说,为什么 for() 不能将 i 作为单个值传递给 if...else 成功?还是编码错误?
2)如果没有,还有其他方法吗?
x <- 1:10
funky <- function(x){
out <- vector("list", length(x))
for (i in 1:length(x)){
out[[i]] <- if(x<3){
x+1
} else if (x==3){
x+10
}else{x+100}
}
}
funky(x)
解决方案
这回答了“是否有另一种方法来做到这一点”的问题。
sapply(seq(1:10), function(x) ifelse(x<3, x+1,
ifelse(x==3, x+10, x+100)))
[1] 2 3 13 104 105 106 107 108 109 110
或者,如果您想要一个独立的功能:
x <- 1:10
funky <- function(x){
ifelse(x<3, x+1, ifelse(x==3, x+10, x+100))}
> funky(x)
[1] 2 3 13 104 105 106 107 108 109 110
或者,如果您不需要自定义函数:
x <- 1:10
ifelse(x<3, x+1, ifelse(x==3, x+10, x+100))
[1] 2 3 13 104 105 106 107 108 109 110
推荐阅读
- npm - 管理多个 NPM 组件
- python - 想使用 django rest 框架进行身份验证,我想为导师和其他用户设置登录路径并保留一些端点
- javascript - 如何在角材料分页按钮旁边添加文本?
- python - 如何找到熊猫的滚动百分比
- javascript - React 数组推送方法
- keycloak - 调用 Keycloak 的 end_session_enddpoint 的正确方法是什么
- python - TypeError:“float”类型的对象没有 len() - NLP
- spring-batch - 运行 Tasklet 和 Chunk 步骤的作业似乎导致块步骤仅处理数据的一部分(100 行)
- javascript - Javascript - 反序列化的 json 字符串按字符串获取值
- plsql - Oracle PLSQL 在每批完成后打印批量输出