簡體   English   中英

如何在 R 的環境中動態訪問和調用 function?

[英]How do I dynamically access and call a function in R's environment?

假設我的環境中有一個 function 定義如下:

abc <- function(x, a, b=23) { return(paste(x, a, b, sep=';')) }

我想通過它在環境中的名稱來引用上面的 function 並能夠調用它來替換它的參數。 舉個例子:

> fun.abc <- get.fun.from.env('abc')  #`fun.abc` should be the same as `abc` (above)
> x <- 123
> addl.params <- c(a=245, b=345)
> do.call(fun.abc, list(x, addl.params))
123;245;345

我將如何實現這個想法?

do.call將接受 function 名稱作為字符串,因此:

fun.name <- "abc"
do.call(fun.name, c(x, as.list(addl.params)))
## [1] "123;245;345"

如果 fun.name 不在 do.call 可訪問的環境中,您可能需要指定 do.call 的 envir= 參數。

*** 更新。 在與 G. Grothendieck 進行簡短討論后,我現在知道該怎么做:

> fun.abc <- get('abc')
> x <- 123
> addl.params <- c(a=245, b=345)

#somewhere else when I have a pointer to fun.abc
> do.call(fun.abc, c(x, as.list(addl.params)))

*** 這是我第一次嘗試:

我以一種不同的方式接近了我想做的事情。 希望有人能夠提出一種方法來實現我最初的意圖......

apply.fun <- function(func.id, x, ...) {
  func.def <- load.func.spec.from.db(func.id)
  def.args <- eval(str2lang(func.def$params))
  args <- replace(def.args, names(...), as.list(...))

  do.call(func.def$fun, list(x=x, unlist(args)))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM