"Unused argument" 将外部向量作为参数时函数 (if.​​..else) 出错

"Unused argument" error in function (if...else) when putting external vector as argument

我正在尝试设置一个函数,该函数从单个向量中获取值,执行一些初始检查并最终进行计算,以防检查找到合适的输入。这是我面临的问题的简化版本:

我需要一个向量,由两个值占位符组成

vec <- c(a,b)

然后,我设置函数 tt:

tt<-function(vec)
    if(a > b){
        return("ERROR")
    }else{message("ok")}

并输入两个测试值:

tt(1,2)

...然而,这会产生 "Error in tt(1, 2) : unused argument (2)"。 我试过用其他方式定义向量 vec(a,b) ,例如:

a<-vec[1]
b<-vec[2]

tt<-function(vec)
    if(a > b){
        return("ERROR")
    }else{message("ok")}

tt<-function(vec)
    if(a > b){
        a<-vec[1]
        b<-vec[2]
        return("ERROR")
    }else{message("ok")}

当我将占位符直接输入函数时,整个 if/else 工作正常,如:

tt<-function(a, b)
    if(a > b){
       return("ERROR")
    }else{message("ok")}

tt(1,2)

所以我假设问题一定是由于我无法将向量正确地放入函数中引起的。我非常感谢任何关于如何正确表达这一点以使 R 理解的意见。

您需要调用:tt(c(1,2)) 而不是 tt(1,2)

让我们考虑一下您的函数定义。首先,您需要一组额外的大括号。

tt<-function(vec){
    if(a > b){
        return("ERROR")
    }else{message("ok")}}

其次,在英语中,您的函数 tt 接受一个参数 vec

现在让我们考虑一下您的函数调用:

tt(1,2)

在英语中,您想使用参数 12 计算 tt。但是,您的函数只接受一个参数。因此您会收到错误:"Error in tt(1, 2) : unused argument (2)",因为第二个参数 2 未使用。

我们该如何解决这个问题?首先,我们可以根据vec定义ab

tt<-function(vec){
    a <- vec[1]
    b <- vec[2]
    if(a > b){
        return("ERROR")
    }else{message("ok")}}

现在我们可以用一个参数调用 tt,一个包含两个元素的向量:

tt(c(1,2))
#ok
tt(c(2,1))
#[1] "ERROR"