1

我是编写函数的新手,如果不报告函数中的给定参数而无需为每个潜在语句编写多个 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(如果你包括 ay,你会得到对象“结果”的同样问题)。如果在每个 if 语句中不包含特定的 return() 函数,你能抑制其中一个返回元素吗?感谢您的任何想法

4

2 回答 2

1

您可以使用compactfrom plyr,并在开始时将初始化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 元素

于 2013-10-31T14:52:11.410 回答
0

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

try(fun(x1,x2),silent=TRUE)
于 2013-10-31T15:30:51.280 回答