8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在 R 中使用函数名称的字符串调用函数?

Sachin Tayade 1月前

15 0

我正在尝试使用给定的函数名称字符串来调用一个函数。例如 print(funcList)[[1]]`*`[[2]]sin 有效:mult <- `*`mult(5,6)[1] 30 无效:func1 <- funcList[[...

我正在尝试使用给定的函数名称字符串来调用一个函数。

例如

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

[[2]]
sin

作品:

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

不起作用:

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

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

那么是否可以调用 functionList 中的所有函数?

帖子版权声明 1、本帖标题:如何在 R 中使用函数名称的字符串调用函数?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Sachin Tayade在本站《function》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这些看起来不像字符串;看起来像函数列表。要回答标题中提出的问题,请参阅 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
    
  • 谢谢你的回答。但是你是对的。我没有字符串列表,我有一个函数列表。你能告诉我如何用函数列表来做到这一点吗?

  • Jeez 1月前 0 只看Ta
    引用 4

    @tobi 正如@Joshua 在上面的评论中提到的,你所做的对我来说是有效的。我已更新我的答案以向您展示哪些方法有效。如果我的答案中的示例对您不起作用,请编辑您的问题以向我们展示您尝试此操作时 R 给出的确切输出。

  • 请参阅文档 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
    
返回
作者最近主题: