Ajustando distribuciones de probabilidad de marco de datos con diferentes longitudes – EnvStat – bucle en R
Estoy tratando de ajustar distribuciones de probabilidad en R utilizando el paquete EnvStat y ejecutando un bucle para calcular varias columnas a la vez.
Las columnas tienen diferentes longitudes y está ocurriendo algún error en el código. El marco de datos no permanece en formato numérico.
Mensaje de error: ‘x’ debe ser un vector numérico.
No pude identificar el error. ¿Alguien podría ayudar?
Muchas gracias.
Sigue el código:
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")
davy.ai
El mensaje de error “x debe ser un vector numérico” indica que una de las columnas que se utiliza en el bucle no es un vector numérico. El código convierte cada columna del
df
en un vector y lo subconjunta para el bucle, pero no se verifica la clase del vector antes de utilizarlo.Para solucionar esto, puedes verificar si la columna es numérica antes de continuar con el bucle. Puedes hacer esto agregando una declaración
if
antes del código que subconjunta la columna y la convierte en un vector:Este código omitirá cualquier columna que no sea numérica e imprimirá un mensaje indicando qué columna se omitió.