如何在 ifelse 语句中只获得一次迭代

How to get only one iteration in ifelse statement

我正在尝试通过函数传递字符串以调用数据框中的列。我做了一个非常简单的 if-else 函数来确保在增加复杂性之前基础工作正常。本质上,如果在数据框中找到列名,则打印 "Hi",否则打印 "No"。该函数正确识别列名是否在数据框中,但它会打印重复的 "No"。

我试过使用if(){}else(){}

使用ifelse()

将 break 和 next 与 if(){}else(){} 方法一起使用

df <- as.data.frame(cbind("a" = 1:5,
                    "b" = 6:10))

testingIf <- function(x){
  if(x %in% colnames(df)){
    print("Hi")
  }
  else{
    (print("No"))
  }
}
testingIf("a")
testingIf("This is true")

if(){}else(){} -这是我最初的尝试,如果 'if' 为真,它会按预期工作,但如果 'if' 为假,它会打印出 [1] No [1] No.

使用ifelse() -打印出 [1] Hi [1] Hi 当 true 和 [1] No [1] No 当 false

if(){}else(){} 语法中使用 break 和 next - 就它给我正确的输出而言,这是有效的,但我得到

"Error: no loop for break/next, jumping to top level"

,这让我觉得我错过了什么。

使用 ifelse() 函数可以简化您的函数。

使用您的数据框 df <- as.data.frame(cbind("a" = 1:5,"b" = 6:10)),我们可以将您的函数重写为:

testingIf <- function(x,dt){
    ifelse(x %in% colnames(dt),"Hi","No")
}

现在测试代码,我们有:

> testingIf("a",df)
[1] "Hi"
> testingIf("This is true",df)
[1] "No"

希望对您有所帮助!