Как восстановить тип элемента списка в r? - PullRequest
0 голосов
/ 05 сентября 2018

Код ниже жалуется на:

Ошибка в UseMethod («предсказать»): нет подходящего метода для «предсказать» применяется к объекту класса "список" >

Есть ли способ привести элемент списка обратно к правильному типу?

edit: благодаря @ 李哲源, приведенный ниже код работает:

models <- list(m, logit, loglog)
plot(x,y)
abline(models[[1]],col="black",lty=2)
lines(x,predict(models[[2]], df),col="red",lty=3)

оригинальный код:

if(!require(betareg)){install.packages("betareg")}
set.seed(123)
x=seq(1,9,1)
print(x)
y=x/10+0+rnorm(length(x),0,.1)
print(y)
m=lm(y~x)
logit<-betareg(y~x,na.action=na.omit)
plot(x,y)
abline(m,col="red",lty=2)
#lines(x,predict(logit, y),col="green",lty=3)
models=c(m,logit)
abline(models[1],col="blue",lty=4)
lines(x,predict(models[2], y),col="blue",lty=5)

1 Ответ

0 голосов
/ 05 сентября 2018

Модель регрессии сохраняется в виде «списка» со специальным «классом». Прямая конкатенация с использованием c отбрасывает такой «класс». Проверьте length(models): у вас есть 41, а не 2.

Используйте одно из следующих

models <- c(list(m), list(logit))
models <- list(m, logit)

для сохранения «класса» регрессионных моделей и используйте models[[1]] и models[[2]] для доступа к этим моделям (например, abline(models[[1]]) и predict(models[[2]], y)).

В качестве альтернативы, предварительно составьте правильный список и заполните его (это полезно, если вы храните модели в цикле)

models <- vector("list", 2)
models[[1]] <- m
models[[2]] <- logit
...