【问题标题】:Supress function output in R if argument missing如果缺少参数,则抑制 R 中的函数输出
【发布时间】:2013-10-31 14:46:13
【问题描述】:

我是编写函数的新手,如果没有报告函数中的给定参数,我想抑制输出,而不必为每个潜在语句编写多个 return()。例如:

fun <- function(x1,x2, y){
    if(missing(y)){result<- x1+x2}
    if(!missing(y)){ols<-lm(y ~ x1 + x2)}  
return(list(result = result, 
            ols = ols))

}   

x1 <- rnorm(100)
x2 <- rnorm(100)

fun(x1,x2)

运行此命令时,由于未报告 OLS,因此会出现错误(如果包含 y,则对象“结果”会出现相同的问题)。如果在每个 if 语句中不包含特定的 return() 函数,你能抑制其中一个返回元素吗?感谢您的任何想法

【问题讨论】:

    标签: r function output suppress


    【解决方案1】:

    您可以使用 plyr 中的 compact,并在开始时将 resultols 对象初始化为 NULL。

    library(plyr)
    
    fun <- function(x1, x2, y){
      result = ols = NULL
      if(missing(y))
        result <- x1+x2
      if(!missing(y))
        ols <- lm(y ~ x1 + x2)
      return(compact(list(result = result, 
              ols = ols)))
    
    }   
    
    x1 <- rnorm(100)
    x2 <- rnorm(100)
    
    fun(x1,x2)
    

    plyr::compact 从列表中删除 NULL 元素

    【讨论】:

    • 如果你不想使用plyr::compact,你可以使用来自base R的sapply语句,首先创建你的返回列表对象,然后使用my.list &lt;- my.list[!sapply(my.list, is.null)]然后返回my.list
    • @scottyaz 没错,但我认为使用 compact 的代码更少,而且我认为现在大多数人都安装了 plyr?
    【解决方案2】:

    使用try 函数进行错误处理:

    try(fun(x1,x2),silent=TRUE)
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 2021-12-17
      • 1970-01-01
      相关资源
      最近更新 更多