R - 停止(字符串)vs停止(cat(string1,...))

时间:2015-01-13 18:06:43

标签: r

在使用R编写非常简单的验证代码时,我希望系统错误通知(即......中的错误)在我的字符串之前(例如n1< = 0)。它是这样做的 一个简单的字符串,但顺序是相反的,带有连接的字符串。非常感谢你的帮助。

chk = function(n1,n2,n3){
  if (n1 <= 0){
    stop("n1 <=0")
  }
  if (n3 > n2){
    stop(cat("n3(=", n3 ,")>n2(=", n2, ")\n"))
  }
}

chk(0,1,2)
# prints --> Error in chk(0, 1, 2) : n1 <=0
chk(1,1,2)
# prints --> n3(= 2 )>n2(= 1 )
#            Error in chk(1, 1, 2) : 

1 个答案:

答案 0 :(得分:1)

cat()函数立即将其...参数打印到控制台,除非您选择不(使用file参数)。它的输出实际上不是字符串,而是类NULL。由于它在stop()之前进行评估,因此首先打印。

您可以将cat()替换为paste()

来解决此问题
chk = function(n1,n2,n3){
    if (n1 <= 0){
        stop("n1 <=0")
    }
    if (n3 > n2){
        stop(paste("n3(=", n3 ,")>n2(=", n2, ")\n"))
    }
}

chk(0,1,2)
# Error in chk(0, 1, 2) : n1 <=0
chk(1,1,2)
# Error in chk(1, 1, 2) : n3(= 2 )>n2(= 1 )