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