我有个功能就像
dbh2vol <- function(dbh,hgt,...){
if (missing(hgt)){
hgt = 2
cat("hgt is missing. Set to 2")
}
vol = dbh * hgt
return(vol)
}如果我把它叫做
Vol = dbh2vol(dbh=10,hgt=4)
#40百事大吉。如果我有这样的东西
Vol = dbh2vol(dbh=10,param=4)
#hgt is missing. Set to 2[1] 20如预期的那样。但如果那样的话
Vol = dbh2vol(dbh=10,h=4)
#40h=4被解释为hgt=4。为什么和怎样才能避免这样的行为,即如何才能使论点与它们的名字完全匹配呢?
发布于 2016-10-09 17:53:09
您观察到的是命名函数参数的部分匹配,据我所知,您不能禁用它。有关更多信息,请参见r语言定义https://cran.r-project.org/doc/manuals/R-lang.html#Argument-matching
也许你可以把hgt的论点放在这三个点上,然后检查一下吗?当然,你会松开位置匹配。
dbh2vol <- function(dbh, ...){
hgt <- list(...)$hgt
if (is.null(hgt)) {
hgt <- sqrt(dbh)
cat("hgt has been calculated with some_other_function")
}
vol = dbh * hgt
return(vol)
}发布于 2016-10-09 17:53:50
不必将dbh和hgt作为参数传递,您可以尝试如下:
pars <- list(
dbh = 10,
h = 5
)
dbh2vol <- function(pars){
with(pars,{
if (!exists("hgt")){
hgt <- 2
cat("hgt is missing. Set to 2")
}
vol <- dbh * hgt
return(vol)
})
}
dbh2vol(pars)
## hgt is missing. Set to 2[1] 20这也使您可以轻松地将参数传递给其他函数。
https://stackoverflow.com/questions/39946281
复制相似问题