如何在R中访问函数参数(如果函数作为字符串传递)

时间:2017-05-14 18:38:33

标签: r function try-catch parameter-passing

warn <- NULL
withwarn <- function(fun) { tryCatch(fun, warning=function(w) { 
  warn <<- append(warn, paste(time, conditionMessage(w))) } )}

withwarn(reqHistoricalData(tws,x,time,'1 min','5 D','0','HISTORICAL_VOLATILITY'))

我将一个函数传递给tryCatch,并希望获得参数time的值 我用sys.call等尝试了几种方法,但看起来我的问题不同了:函数(w),time没有传递,而函数(fun)时间只是函数字符串的一部分(仅在稍后的tryCatch中进行评估)

编辑(解决方案):

我刚为withwarn <- function(fun,y)添加了另一个参数time

1 个答案:

答案 0 :(得分:0)

这个怎么样:

warn <- NULL
withwarn <- function(fun) { 
    args <- match.call()
    time_arg <- if("time" %in% names(args[[2]])) 
        eval(args[[2]][["time"]])
    else {
        eval(args[[2]][[4]])
    } 
    tryCatch(fun, warning=function(w) { warn <<- append(warn, paste(time_arg, conditionMessage(w))) } )
}

reqHistoricalData <- function(tws, x, time, ...) warning("some warning.")

ans <- withwarn(reqHistoricalData(tws, x, Sys.time(), '1 min','5 D','0','HISTORICAL_VOLATILITY'))

但是,您在问题中的解决方法对我来说更好/更清洁。