r - R 函数中的非此即彼参数

标签 r function arguments

我对用 R 编写函数还是个新手。

我尝试编写一个需要以下功能的函数: 要么是参数“a”,要么是参数“b”和“c”。

此外,该函数还有一些带有默认值的参数。

我怎样才能最好地处理非此即彼的争论。如果提供“a” 我不需要“b”和“c”,反之亦然,但至少需要一个。

此外,“a”是一个字符串(水果,如“Apple”、“Pear”等),而“b”和“c”是值。后台有一个数据框,其中为每种水果定义了值“b”和“c”。因此,使用该函数要么需要一个有效的水果(参数“a”),要么需要值“b”和“c”本身。

我开始使用的功能:

f <- function(a,b,c,d=1,e=2)

最佳答案

 dfrm <- data.frame(a=LETTERS[1:3], 
        b=letters[1:3], 
        c=letters[5:7], 
        res=c("one", "two", "three") )
 dfrm
#
  a b c   res
1 A a e   one
2 B b f   two
3 C c g three

 f <- function(a=NA,b=NA,c=NA,d=1,e=2){ 
                if ( is.na(a) & (is.na(b) | is.na(c) ) ) {stop()}
                if (!is.na(a) ) { dfrm[dfrm[[1]]==a, ] 
                       # returns rows where 1st col equals `a`-value
                                   } else {
                                     dfrm[ dfrm[[2]]==b & dfrm[[3]] == c , ]
                       #returns rows where 2nd and 3rd cols match `b` and `c` vals
                                           }
 }
 f("A")
#
  a b c res
1 A a e one

 f(b="a", c="e")
#
  a b c res
1 A a e one

 f()
#Error in f() : 

我认为可能存在一些未经测试的边缘情况,但提供适当的测试 Material 确实是提问者的责任,而@Johannes甚至没有提供简单的测试数据结构,更不用说提供一组边缘情况了。

关于r - R 函数中的非此即彼参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9925245/

相关文章:

r - 如何从Rust程序宏生成文件?

mysql - OUT 或 INOUT 参数不起作用

c++ - 理论上可以在 C++ 函数中将多少参数作为参数传递?

C# - 将可执行文件路径和参数拆分为两个字符串

r - 添加一个新列,指定多个具有值的列名称

python - statsmodels 线性回归 - Patsy 公式包含模型中的所有预测变量

r - 我们可以从日期中提取周数吗

php - 我的 PHP 函数无法在外部服务器上运行

c++ - 函数声明和签名有什么区别?

javascript - 函数级作用域和 block 级作用域的区别