R 如何返回在函数中创建的对象并忽略带有错误/NA的对象?

R 如何返回在函数中创建的对象并忽略带有错误/NA的对象?,r,fitdistrplus,R,Fitdistrplus,我已经编辑了我的问题 目标 我只想保留那些成功创建的对象,而忽略那些抛出错误的对象 例子 请注意,这只是一个可复制的示例。我的原始数据集不同 以下函数获取mtcarsdataset的任何变量,拟合三个理论分布,然后返回拟合优度统计数据: library(fitdistrplus) fit_distt <- function(var) { v <- mtcars[, var] f1 <- fitdist(data = v, distr = "norm&qu

我已经编辑了我的问题

目标 我只想保留那些成功创建的对象,而忽略那些抛出错误的对象

例子 请注意,这只是一个可复制的示例。我的原始数据集不同

以下函数获取
mtcars
dataset的任何变量,拟合三个理论分布,然后返回拟合优度统计数据:

library(fitdistrplus)

fit_distt <- function(var) {
  
v <- mtcars[, var]
  
f1 <- fitdist(data = v, distr = "norm")

f2 <- fitdist(data = v, distr = "nbinom")

f3 <- fitdist(data = v, distr = "gamma")

gofstat(f = list(f1, f2, f3), 
        chisqbreaks = c(0, 3, 3.5, 4, 4.5, 
                        5, 10, 20, 30, 40),
        fitnames = c("normal", "nbinom", "gamma"))

}
问题 某些理论分布无法成功拟合变量,
fitdist
抛出错误:

> fit_distt("mpg")
<simpleError in optim(par = vstart, fn = fnobj, fix.arg = fix.arg, obs = data,     gr = gradient, ddistnam = ddistname, hessian = TRUE, method = meth,     lower = lower, upper = upper, ...): function cannot be evaluated at initial parameters>
 Error in fitdist(data = v, distr = "nbinom") : 
  the function mle failed to estimate the parameters, 
                with the error code 100 
我试过的 显然,我可以从函数中删除
f2
。但这意味着对每个变量重复所有代码。这是很多代码!所以,我仍然想使用这个函数

我希望能够对任何变量使用函数。对于
mtcars$mpg
,函数对于
nbinom
失败,但是对于
mtcars$vs
,函数对于
gamma
失败。在任何情况下,我都希望跳过引发错误的配合,并报告有效配合的
gofstat


我可以使用
purrr::可能的话
悄悄地返回一个合适的结果,或者抛出错误而不停地处理错误。但是我不知道如何仅在
gofstat

中返回成功拟合的值。您可以用单个
lappy
替换单个列表子集。如果您让它返回一个
NULL
而不是
NA
,则该条目将在未列出后消失。因此,以下函数将执行您想要的操作,如本reprex中所示:


在列表中查找每个向量的平均值您可以尝试使用
try
。尝试适合发行版,仅将其添加到传递给
gofstat
的列表中(如果有效):

库(FitDistripPlus)
#>装载所需包装:质量
#>装载所需包裹:生存
拟合度-拟合优度标准
#>范数伽马
#>Akaike的信息标准208.7555 205.8416
#>贝叶斯信息准则211.6870 208.7731

由(v0.3.0)于2020-10-07创建

您可以在函数中返回
my_向量[!is.na(my_向量)]
,或者将当前函数包装在
na中。是否省略
是,但这不是我的问题。我只想返回那些计算出的平均值。如果未计算平均值,我想将其排除在外
NA
是一种可能性,但是如果甚至没有创建
f11
呢?你应该提供一个例子来说明你的意思,并澄清你的帖子。您的大部分“问题”和示例代码只提到
NA
值。另外,我强烈建议研究
apply
map
函数系列,比如:
lappy(我的列表1,意思)
@astrofunkswag,澄清并添加了适当的示例。
> fit_distt("mpg")
<simpleError in optim(par = vstart, fn = fnobj, fix.arg = fix.arg, obs = data,     gr = gradient, ddistnam = ddistname, hessian = TRUE, method = meth,     lower = lower, upper = upper, ...): function cannot be evaluated at initial parameters>
 Error in fitdist(data = v, distr = "nbinom") : 
  the function mle failed to estimate the parameters, 
                with the error code 100 
> fit_distt("mpg")
Goodness-of-fit statistics
                                 normal      gamma
Kolmogorov-Smirnov statistic 0.12485059 0.08841088
Cramer-von Mises statistic   0.08800019 0.03793323
Anderson-Darling statistic   0.58886727 0.28886166

Goodness-of-fit criteria
                                 normal    gamma
Akaike's Information Criterion 208.7555 205.8416
Bayesian Information Criterion 211.6870 208.7731