2 votes

Pourquoi get ne trouve pas d'objet en gamm, alors qu'il fonctionne en lm ?

Je me débats avec l'écriture d'une fonction R qui appelle une variable à l'aide de get()

Supposons que j'ai ce cadre de données :

mydat = data.frame(y = rnorm(100), 
                   x = rnorm(100), 
                   day = sample(90:260, 100, replace = T), 
                   r1 = sample(seq(2008,2015,1), 100, replace = T),
                   r2 = sample(letters, 100, replace = T), 
                   r3 = sample(letters, 100, replace = T))

et je voudrais écrire une fonction qui renvoie le résumé d'un modèle gamm, par exemple comme ceci

gamm_summary = function(data, response = "y"){
    require(mgcv)
    gamm_model = gamm(get(response) ~ s(day),
                      random = list(r1=~1, r2=~1, r3 =~1), data = data, method = "REML")

    summary(gamm_model$gam)
}

gamm_summary(mydat)

Pourquoi cela me donne-t-il l'erreur :

Erreur dans get(response) : objet 'response' non trouvé

pourtant les travaux suivants :

lm_summary = function(data, response = "y") {
    lm_model = lm(get(response) ~ x, data = data)
    summary(lm_model)
}

lm_summary(mydat)

Q : Pourquoi get ne fonctionne pas dans ma fonction gamm et comment puis-je réécrire la fonction pour qu'elle fonctionne ?

2voto

d.b Points 19348
require(mgcv)
gamm_summary = function(mydata, a1 = "y", b1 = "day", rnd1 = "r1", rnd2 = "r2", rnd3 = "r3"){
    df = data.frame(aa = mydata[[a1]], bb = mydata[[b1]], rnd1 = mydata[[rnd1]], rnd2 = mydata[[rnd2]], rnd3 = mydata[[rnd3]])
    gamm_model = gamm(aa ~ s(bb), data = df, random = list(rnd1 =~ 1, rnd2 =~ 1, rnd3 =~ 1), method = "REML")
    summary(gamm_model$gam)
}

gamm_summary(mydat, a1 = "x")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X