拟合不同长度的数据帧概率分布——R中的EnvStat循环



我正在尝试使用EnvStat包和循环来一次计算多列,以拟合R中的概率分布。列具有不同的长度,并且正在发生一些代码错误。数据帧不保持为数字格式。错误消息:"x"必须是数字矢量我无法识别错误。有人能帮忙吗?非常感谢

跟随代码:

x = runif(n = 50, min = 1, max = 12)
y = runif(n = 70, min = 5, max = 15)
z = runif(n = 35, min = 1, max = 10)
m = runif(n = 80, min = 6, max = 18)
length(x) = length(m)
length(y) = length(m)
length(z) = length(m)
df = data.frame(x=x,y=y,z=z,m=m)
df
library(EnvStats)
nproc = 4
cont = 1
dfr = data.frame(variavel = character(nproc), 
locationevd= (nproc), scaleevd= (nproc),
stringsAsFactors = F)

# i = 2
for (i in 1:4) {

print(i) 

nome.var=colnames(df)

df = df[,c(i)]
df = na.omit(df)

variavela = nome.var[i]
dfr$variavel[cont] = variavela

evd = eevd(df);evd
locationevd = evd$parameters[[1]]
dfr$locationevd[cont] = locationevd
scaleevd = evd$parameters[[2]]
dfr$scaleevd[cont] = scaleevd
cont = cont + 1

}
writexl::write_xlsx(dfr, path = "Results.xls")

代码的两个主要更改:首先,使用列表而不是数据帧(这样您就可以容纳不相等的矢量长度(:

x = runif(n = 50, min = 1, max = 12)
y = runif(n = 70, min = 5, max = 15)
z = runif(n = 35, min = 1, max = 10)
m = runif(n = 80, min = 6, max = 18)

vl = list(x=x,y=y,z=z,m=m)
vl
if (!require(EnvStats){ install.packages('EnvStats'); library(EnvStats)}

nproc = 4
# cont = 1   Not used
dfr = data.frame(variavel = character(nproc), 
locationevd= (nproc), scaleevd= (nproc),
stringsAsFactors = F)

第二:使用一个循环索引而不使用"循环索引";cont";索引

for ( i in 1:length(vl) ) {
# print(i)    Not needed
nome.var=names(vl)  # probably should have been done before loop
var = vl[[i]]
variavela = nome.var[i]
dfr$variavel[i] = variavela  # all those could have been one step

evd = eevd( vl[[i]] )   # ;evd
locationevd = evd$parameters[[1]]
dfr$locationevd[i] = locationevd
scaleevd = evd$parameters[[2]]
dfr$scaleevd[i] = scaleevd
}

它为您提供了所需的结构:

dfr
variavel locationevd scaleevd
1        x    5.469831 2.861025
2        y    7.931819 2.506236
3        z    3.519528 2.040744
4        m   10.591660 3.223352

相关内容

  • 没有找到相关文章

最新更新