【问题标题】:Function call with additional custom arguments带有附加自定义参数的函数调用
【发布时间】:2019-09-20 01:48:57
【问题描述】:

我正试图将头绕在 R 中的省略号上。我有一个函数,并且希望能够根据需要将其他参数传递给函数,例如是否返回 df 或类似的。我可以不指定变量名吗?这是一个非常简化的示例,我希望能够将其设为可选,以使函数调用尽可能简单和干净,并在函数中针对各种场景使用多个可能的条件。

 custom.fun<-function(x, y, z, ...){

 a<-sum(x, y, z)

   if (exists('return.var') && return.var=='yes'){
     return(a)
   }
 }

 A<-custom.fun(1,2,3,return.var='yes')

这将返回 Null,因为它显然没有传递 return.var。

【问题讨论】:

    标签: r function ellipsis


    【解决方案1】:

    我想你可以做类似的事情,捕获list 中的所有可选参数并检查它们中的any 是否具有所需的名称和值。

    custom.fun<-function(x, y, z, ...){
       opt_args <- list(...)
       a <- sum(x, y, z)
       if (any(names(opt_args) == 'return.var' & opt_args == 'yes'))
           return(a)
       else 
           return('No arg')
    }
    
    custom.fun(1,2,3,return.var = 'yes')
    #[1] 6
    
    custom.fun(1,2,3,var = 'yes')
    #[1] "No arg"
    
    custom.fun(1,2,3,var='no', return.var = 'yes')
    #[1] 6
    

    【讨论】:

    • 好的,几乎完美。据我了解,这应该适用于任何字符串,而不仅仅是“是”,但一旦我将其更改为其他任何字符串,它就会停止工作并且条件返回 FALSE。就像我从字面上只将两个“yes”更改为“true”或“y”,例如,它在任何()中都不匹配
    • @Anke 如果我将if 行中的最后一部分更改为opt_args == 'true' 并通过custom.fun(1,2,3,var='no', return.var = 'true') 调用它,它对我有用吗?更改后是否再次运行该函数?
    • 发现我的错误,非常抱歉。而不是 opt_args=='yes' 我有 return.var=='yes' 并且它正在工作,因为我想我之前已将 return.var 定义为“yes”并且没有清除我的变量。再次感谢您的帮助!
    • 它实际上可以更短,更简洁:if(opt_args$return.var=='yes')){ return(a)}
    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2021-07-28
    • 2018-11-11
    • 1970-01-01
    • 2013-01-24
    • 2020-08-24
    相关资源
    最近更新 更多