如何在包装函数中建立灵活性,以便它可以处理缺少或存在的特定参数。
更具体地说,我正在为FD包中的gowdis函数构建一个包装器,我想让用户选择包含或排除参数'asym.bin'和'ord'。给出以下示例的任何建议:
library(FD)
?gowdis
x<-data.frame("Trait1" =c(1,1,0),
"Trait2"=c(1,1,1),
"Trait3" =c(1,1,0),
"Trait4" =c(0,0,1))
rownames(x)<-c("A","B","C")
w<-c(0.25,0.25,0.25,0.25)
m<-2
asym.bin<-c(1,4)
wrapper.function = function(x,w,m) {
gdis<-gowdis(x,w)
gdis2<-gdis*m
gdis2
}
#excluding the ord and asym.bin works fine
wrapper.function(x,w,m)
A B
B 0.5
C 1.0 1.5
#but I want to give the user the option of including these wrapped arguments i.e.
wrapper.function = function(x,w,m,asym.bin,ord) {
gdis<-gowdis(x,w,asym.bin,ord)
gdis2<-gdis*m
gdis2
}
wrapper.function(x,w,m)
但是,这会返回错误消息
match.arg(ord)中的错误:缺少参数“ord”,没有默认的'
答案 0 :(得分:3)
您可以为参数提供默认值:
wrapper.function = function(x, w, m, asym.bin=NULL, ord='podani') {
gdis <- gowdis(x, w, asym.bin, ord)
gdis2 <- gdis * m
gdis2
}
解决问题的替代方法可能是(如评论中提到的@Jilber) 使用省略号。
wrapper.function = function(x, w, m, ...) {
gdis <- gowdis(x, w, m, ...)
gdis2 <- gdis * m
gids2
}