首页 > 解决方案 > 使用 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)

标签: r

解决方案


这回答了“是否有另一种方法来做到这一点”的问题。

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

推荐阅读