如果参数缺失,则抑制R中的函数输出

时间:2013-10-31 14:46:14

标签: r function output suppress

我是编写函数的新手,如果没有报告函数中的给定参数而不必为每个潜在语句写入多个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()函数,是否可以抑制其中一个返回元素?感谢任何和所有的想法

2 个答案:

答案 0 :(得分: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元素

答案 1 :(得分:0)

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

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