返回列表值的控制流

Control flow for returning list values

我正在尝试 return 给定此函数的值列表:

Pass_or_fail <- function(y){
 x = round(runif(y, 0, 100), 1)
  if(x>50){
    list(print("Passed"))
  }else if(x < 50){
    list(print("Failed"))
  }
}

当我将一个值传递给 y 例如 20 时,这应该 return 一个 PassedFailed 字符的列表。但是,上面的函数只有 return 一个向量。我希望它 return 相对于上面提供的条件的 20 个值,主要是列表格式。

我想像这样创建一个变量:

t_list <- list(1:20)
#then
Map(Pass_or_fail(20), t_list)

示例输出(虽然不准确):

 "Passed" "Failed" "Passed" "Failed" "Passed" "Failed" "Passed" "Failed" "Passed" "Failed" "Passed" "Failed" "Passed" "Failed" "Passed" "Failed" "Passed" "Failed" "Passed" "Failed"

我好像还想不通。

应用 map,您编写的函数将向量而不是单个元素作为输入。试试这个:

Pass_or_fail2 <- function(y) {
  x <- round(runif(y, 0, 100), 1)
  condition <- ifelse(x > 50, "passed", "failed")
  print(condition)
}

map(Pass_or_fail2(10), 1)

如果您想在函数 Pass_or_fail2 中将向量作为输出注释 print 并使用:

unlist(map(Pass_or_fail2(10), 1))

从表面上看你的问题,

Pass_or_fail <- function(y){
    x = round(runif(y, 0, 100), 1)
    
    lapply(
        x,
        FUN = function(x){
            
            if(x>50){
                list(print("Passed"))
            }else if(x < 50){
                list(print("Failed"))
            }
            
        }
    )
    
}

注意: 如果您定义的函数中没有 lapply,则无法计算 x 中的所有值,因为长度由 y。通过使用 lapply,您将根据您定义的条件评估 x 中的所有值。

然后将其输入 lapply,得到以下结果;

results <- lapply(
    X = 1:10,
    FUN = Pass_or_fail
    )

这给出了 1 list 公关。 X,每个函数的长度为 x