我是编写函数的新手,如果没有报告函数中的给定参数而不必为每个潜在语句写入多个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()函数,是否可以抑制其中一个返回元素?感谢任何和所有的想法
答案 0 :(得分:1)
您可以在plyr中使用compact
,并在开始时将result
和ols
对象初始化为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)