Je souhaite exécuter la même séquence d'analyse RDA (ajustement d'un modèle, test de la signification du modèle, de l'axe et du terme, traçage des données) sur des sous-ensembles des mêmes jeux de données . Par conséquent, j'ai écrit une fonction. Le problème est maintenant que l'appel à la fonction anova.cca ne fonctionne pas bien dans une fonction lorsque je veux tester l'axe. Il ne peut pas trouver le jeu de données Y.subanova.cca ne trouve pas d'objet dans la fonction définie par l'utilisateur
Erreur dans eval (expr, Envir, Enclos): objet 'RV.sub' not found
exemple de travail minimal:
library(vegan)
data(dune)
data(dune.env)
rda.subsetfunc <- function(RV, Y){
#RV.sub <- subset(RV, !Y$Use%in%c("BF"))
#Y.sub <- subset(Y, !Y$Use%in%c("BF"))
RV.sub <- RV; Y.sub <- Y
rda.mod <- rda(RV.sub ~ Manure, Y.sub)
axis.test <- anova(rda.mod, by = "axis")
return(list(rda.mod, axis.test))
}
rda.subsetfunc(RV = dune, Y = dune.env)
J'ai trouvé quelques autres questions connexes comme here mais cela semble être beaucoup plus compliqué que ce que je fais. J'ai essayé d'implémenter l'approche do.call comme cela est mentionné here mais je n'ai pas réussi à le faire fonctionner. Si ce n'est vraiment pas possible de le faire sans vraiment creuser profondément dans les fonctions, je vais trouver un moyen de programmation autour d'elle. Mais pour moi, c'est comme si j'essayais de faire quelque chose qui prend tout son sens. Donc, il est probablement plus probable que je fasse quelque chose de mal que de faire quelque chose d'impossible.
je fait une erreur stupide en tapant dans la question initiale. J'ai d'abord mis 'rda.subsetfunc (RV = dune, Y = Y.sub)' qui ne fonctionne pas pour des raisons évidentes. Merci à @ chi-pak pour m'avoir fait réaliser – Nightingale
Ce n'est pas le problème car RV.sub est la matrice X et non une colonne de Y. C'est ainsi que fonctionne la fonction rda. Ma fonction fonctionne bien si j'omets la fonction anova. C'est celui qui cause le problème. J'apprécie vraiment votre aide d'ailleurs! – Nightingale
De la page d'aide de rda. 'data (dune) data (dune.env) dune.Manure <- rda (dune ~ fumier, dune.env)' Donc, RV.sub n'étant pas dans Y est correct. – Nightingale