Я хочу выполнить ту же последовательность анализа rda (подгонка модели, проверка значимости модели, оси и термина, построение данных) для подмножеств одних и тех же наборов данных. Поэтому я написал функцию. Теперь проблема в том, что вызов функции anova.cca не работает внутри функции, когда я хочу проверить ось. Он не может найти набор данных Y.sub
Ошибка в eval(expr, envir, enclos): объект 'RV.sub' не найден
Минимальный рабочий пример:
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)
Я нашел некоторые другие связанные вопросы, такие как здесь но это кажется намного сложнее, чем то, что я делаю. Я попытался реализовать подход do.call, как указано здесь, но Я не мог заставить его работать. Если это действительно невозможно сделать без глубокого изучения функций, я найду способ обойти это программированием. Но мне кажется, что я пытаюсь сделать что-то, что имеет смысл. Так что, вероятно, более вероятно, что я делаю что-то неправильное, чем то, что я делаю что-то невозможное.
rda.subsetfunc(RV = dune, Y = Y.sub)
, который не работает по понятным причинам. Спасибо @chi-pak за то, что заставил меня осознать - person Nightingale   schedule 20.06.2017data(dune) data(dune.env) dune.Manure <- rda(dune ~ Manure, dune.env)
Таким образом, RV.sub не находится в Y.sub, это правильно. - person Nightingale   schedule 20.06.2017dune.Manure
. Это показывает это:rda(formula = dune ~ Manure, data = dune.env)
. По какой-то причине этотdune.Manure
ищет переменные в средеparent
... Если вы объявитеRV.sub <- dune
в средеparent
, функция не вернет ошибку. - person CPak   schedule 20.06.2017RV.sub <- dune
в родительском элементе, заключается в том, что мой код немного сложнее, чем просто взять подмножество. Но тогда я просто сделаю два последовательных сценария. Один для создания подмножеств, а другой берет подмножества и выполняет rda. Хотя действительно жаль. И еще раз, я очень ценю, что вы нашли время, чтобы помочь мне. - person Nightingale   schedule 20.06.2017anova.cca(..., by="axis")
, которая должна находить элементы из нескольких разных сред при обновлении формулы. Встраивание функции действительно может потерпеть неудачу. Однако переработанная функция на github.com/vegandevs/vegan, похоже, работает с этим примером. - person Jari Oksanen   schedule 20.06.2017