我有一个函数f,它有两个参数(p1p2):

如果参数p2未向函数传递任何值,则应使用p1^2的值.但是,我如何在函数中发现,是否给定了值.问题是,如果没有值,变量p2就不会初始化.因此,我无法测试p2分为NULL分.

f <- function(p1, p2) {
    if(is.null(p2)) {
        p2=p1^2
    }
    p1-p2
}

是否有可能判断p2的值是否传递给函数?(我找不到isset()函数或类似的东西.)

推荐答案

你可以用missing()这个函数.

f <- function(p1, p2) {
    if(missing(p2)) {
        p2=p1^2
    }
    p1-p2
}

或者,您可以在默认情况下将p2的值设置为NULL.我有时更喜欢这种解决方案,因为它允许将参数传递给嵌套函数.

f <- function(p1, p2=NULL) {
    if(is.null(p2)) {
        p2=p1^2
    }
    p1-p2
}

f.wrapper <-function(p1,p2=NULL){
    p1 <- 2*p1
    f(p1,p2)
}
> f.wrapper(1)
[1] -2
> f.wrapper(1,3)
[1] -1

编辑:从技术上讲,你也可以用missing()来做这件事,但是你也必须在f.wrapper中包含missing()语句.

R相关问答推荐

是否有R函数来判断一个组中的所有值是否与另一个组中的所有值相同?

查找满足SpatRaster中条件的单元格位置

在通过最大似然估计将ODE模型与数据匹配时,为什么要匹配实际参数的转换值?

在R底座中更改白天和夜晚的背景 colored颜色

从嵌套列表中智能提取线性模型系数

根据R中两个变量的两个条件删除带有dspirr的行

在使用ggroove后,将图例合并在gplot中

r替换lme S4对象的字符串的一部分

如何在emmeans中计算连续变量的对比度

如何写一个R函数来旋转最后n分钟?

在R中使用数据集名称

R s iml包如何处理语法上无效的因子级别?'

R-更新面内部的栅格值

如何读取CSV的特定列时,给定标题作为向量

汇总数据的Sheffe检验的P值(平均值和标准差)

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

扩展R中包含列表的数据框

在R中,如何从一系列具有索引名的变量快速创建数据帧?

如何显示准确的p值而不是<;0.001*?

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?