簡體   English   中英

如何使用R中函數名的字符串調用函數?

[英]How to call a function using the character string of the function name in R?

我試圖用函數名稱的給定字符串調用函數。

例如

print(funcList)
[[1]]
`*`

[[2]]
sin

作品:

mult <- `*`
mult(5,6)
[1] 30

不起作用:

func1 <- funcList[[1]]
func1(5,6)

func2 <- funcList[[2]]
func2(1.2)

那么可以調用functionList中的所有函數嗎?

那些看起來不像字符串; 看起來像一個功能列表。 要回答標題中提出的問題,請參閱get() 例如,使用您的列表但存儲為字符串:

funcList <- list("*", "sin")

我們可以使用get()返回列表中所選元素給出的名稱的函數:

> f <- get(funcList[[1]])
> f
function (e1, e2)  .Primitive("*")
> f(3,4)
[1] 12

另一種方法是match.fun()函數,給定一個字符串將找到一個名稱與該字符串匹配的函數:

> f2 <- match.fun(funcList[[1]])
> f2(3,4)
[1] 12

但正如?match.fun告訴我們的那樣,我們可能不應該在提示符處這樣做,而是在函數內部。

如果你有一個函數列表,那么可以簡單地索引到列表中並將其用作函數:

> funcList2 <- list(`*`, sin)
> str(funcList2)
List of 2
 $ :function (e1, e2)  
 $ :function (x)  
> funcList2[[1]](3, 4)
[1] 12
> funcList2[[2]](1.2)
[1] 0.9320391

或者您可以將這些功能保存為臨時對象,但這樣做沒有意義:

> f3 <- funcList2[[1]]
> f3(3,4)
[1] 12
> f4 <- funcList2[[2]]
> f4(1.2)
[1] 0.9320391

請參閱do.call文檔。

快速演示:

do.call("rnorm", list(100, 0, 1))

第一個參數可以是字符串文字或R對象,第二個參數是要與提​​供的函數形式參數匹配的參數列表。

你也可以使用match.fun

> functionlist <- list("*","sin")
> f <- match.fun(functionlist[[1]])
> f(5,6)
[1] 30

暫無
暫無

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

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