我在R中写作函数还是新手。
我尝试编写一个需要的函数: 有一个参数“a”,OR参数“b”和“c”在一起。
此外,此函数还有一些带默认值的参数。
如何最好地处理这两个/或 - 参数。如果提供“a” 我不需要“b”和“c”,反之亦然,但至少需要一个。
此外,“a”是一个字符串(水果如“Apple”,“Pear”等),而“b”和“c”是值。在后台有数据帧,每个水果的定义值为“b”和“c”。因此,使用该函数要么需要有效的水果(参数“a”),要么需要值“b”和“c”本身。
我开始使用的功能:
f <- function(a,b,c,d=1,e=2)
答案 0 :(得分:3)
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() :
我认为可能会有一些未经测试的边缘情况,但提供适当的测试材料确实是提问者的责任,而@Johannes甚至没有提供简单的测试数据结构,更不用说一组边缘情况了。
答案 1 :(得分:1)
missing
功能应该有所帮助:
f <- function(a,b,c,d=1,e=2) {
if (missing(a)) {
# use b and c
b+c # you'll get an error here if b or c wasn't specified
} else {
# use a
nchar(a)
}
}
f('foo') # 3
f(b=2, c=4) # 6
f(d=3) # Error in b + c : 'b' is missing
答案 2 :(得分:0)
查看polar()的定义,找到一个更好的例子:
http://blog.moertel.com/articles/2006/01/20/wondrous-oddities-rs-function-call-semantics