0

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

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

vec <- c(a,b)

然后,我设置了函数 tt:

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

并输入两个测试值:

tt(1,2)

...然而,这会产生“tt(1, 2) 中的错误:未使用的参数 (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 理解的任何输入。

4

2 回答 2

0

你需要打电话:tt(c(1,2))而不是tt(1,2)

于 2020-05-12T13:58:41.857 回答
0

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

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

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

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

tt(1,2)

在英语中,您想tt使用参数1和进行评估2。但是,您的函数只接受一个参数。因此,您会收到错误:“tt(1, 2) 中的错误:未使用的参数 (2)”,因为第二个参数2未使用。

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

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"
于 2020-05-12T23:05:50.437 回答