首页 > 解决方案 > 确定函数调用中是否已给出值的方法

问题描述

我正在编写一个函数,函数的一部分可以接受单个值或向量,或者如果函数调用中未指定任何内容,则保留默认值。

在下面的代码中,“a”被赋予默认值 0,然后在函数中有一个 if 语句来查看“a”是否仍然为 0 或者是否已为其分配了一个值。

如果我使用单个值、向量调用该函数,或者将其留空,它会打印预期的结果。如果给它的向量的长度大于 1,我会收到预期的警告消息(尽管函数仍在工作):'条件的长度 > 1,并且只使用第一个元素'

因此,我的查询是测试“a”是否留空以及运行一段代码(在这种情况下打印“默认”)或“a”是否留空的最佳方法是什么被赋予一个值然后运行一些其他代码(在这种情况下打印“给定值”),如果在我调用函数时将向量分配给“a”,则不会出现警告消息。

示例代码如下:

#Function
ExampleFunction<-function(a=0)

{
if  (a==0)
print ("default")
else{print("value given")}
}

#Run function using a vector which gives the warning message 
abc<-c(1,2,3)
ExampleFunction(abc)

标签: r

解决方案


看到警告是因为在评估语句时,R 需要一个布尔值,而不是布尔值向量,因此当您尝试仅发送 vector 的第一个值时if会看到警告,即 1 被分配给功能。我建议您阅读 R 中的“命名参数”。abc <- c(1,2,3)abca

同时,您可以检查参数的长度a及其值,以查看在调用函数时是否已将其分配给非零值。希望能帮助到你!

关于命名参数的链接:函数默认参数和命名值
https://www.r-bloggers.com/r-tip-force-named-arguments/
https://www.safaribooksonline.com/library/view/r-in -a/9781449358204/ch09s05.html


推荐阅读