2016-09-21 16 views
-1

我想通過.csv文件收集三個變量的最佳分配。我試圖用r提供的發行版進行評估。 然後我會選擇最小的一個作爲最合適的分佈。但是,我無法完成循環,因爲分配不能適用於數據時會發生一些錯誤。例如如何防止錯誤以完成循環?

; Beta分佈:

錯誤fitdistr(XX1 [,K],分佈[1]): '開始' 必須是命名列表

因此,如何能跳過這個錯誤?

這裏是要上傳的文件:http://www.filedropper.com/samplest

下面是代碼:

library(fitdistrplus) 

importeddata <- read.csv(file.choose(), sep=";",na.strings = "", stringsAsFactors=FALSE, header = TRUE) 

for(i in 1:tail(ncol(importeddata))){ 
    importeddata[,i] <- gsub(",", ".", importeddata[ , i])} 

xx1<- as.matrix(as.data.frame(lapply(importeddata, as.numeric))) 

distributions <- c("beta", "cauchy", "chi-squared", "exponential", "f", "gamma", "geometric", "log-normal", "lognormal", "logistic", "negative binomial", "normal", "Poisson", "t", "weibull") 


for(k in 1:ncol(xx1)) 
for(i in 1:length(distributions)) 
{ 
aa <- fitdistr(xx1[,k], distributions[i])$loglik 
suppressMessages(aa) 
print(aa) 
} 
+2

閱讀文檔。對於某些發行版,您必須提供數字優化的初始值。 – Roland

回答

1

如果你只是想發生錯誤時,你可以使用try()功能跳過一些代碼。發生錯誤時,函數內的所有內容都不會破​​壞代碼。

在您的例子,剛剛替補:

aa <- fitdistr(xx1[,k], distributions[i])$loglik

try({aa <- fitdistr(xx1[,k], distributions[i])$loglik})