R как передать NULL для необязательных параметров функции (например, в цикле for) - PullRequest
0 голосов
/ 30 ноября 2018

Я написал цикл for для проверки различных настроек функции ординации в R (пакет "vegan", вызываемый "phyloseq").У меня есть несколько подмножеств моих данных в списке (sample_subset_list), и поэтому проверка различных параметров для всех этих подмножеств приводит к множеству комбинаций.

Функция ординации содержит необязательный аргумент formula, и я хотел бывыполнять мои рукоположения с и без формулы.Я полагаю, NULL будет правильным способом не использовать параметр formula?Но как мне передать NULL при использовании цикла for (или применить и т. Д.)?

Используя данные примера phyloseq:

library(phyloseq)
data(GlobalPatterns)
ps <- GlobalPatterns
ps1 <- filter_taxa(ps, function (x) {sum(x > 0) > 10}, prune = TRUE)
ps2 <- filter_taxa(ps, function (x) {sum(x > 0) > 20}, prune = TRUE)
sample_subset_list <- list()
sample_subset_list <- c(ps1, ps2)

Я пытался:

formula <- c("~ SampleType", NULL)

> formula
[1] "~ SampleType"

ordination_list <- list()
    for (current_formula in formula) {
                            tmp <- lapply(sample_subset_list, 
                                          ordinate, 
                                          method = "CCA",
                                          formula = as.formula(current_formula))
                            ordination_list[[paste(current_formula)]] <- tmp
}

таким образом, formula состоит только из "~ SampleType".Если я поставлю NULL в тиках, это будет неправильно интерпретировано как формула:

formula <- c("~ SampleType", "NULL")
Error in parse(text = x, keep.source = FALSE)

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

Относительно ответа Лизандера:

# make sure to use (as suggested)
formula <- list("~ SampleType", NULL)
# and not 
formula <- list()
formula <- c("~ SampleType", NULL)

1 Ответ

0 голосов
/ 30 ноября 2018

Вместо этого вы можете использовать list:

formula <- list("~ my_constraint", NULL)

# for (i in formula) print(i)
#[1] "~ my_constraint"
#NULL

Если ваша функция принимает NULL в качестве аргумента для функции, вы также должны сделать:

ordination_list <- list()
for (current_formula in formula) {
  tmp <- lapply(sample_subset_list, 
                ordinate, 
                method = "CCA",
                formula = if (is.null(current_formula)) NULL else as.formula(current_formula))
  ordination_list[[length(ordination_list) + 1]] <- tmp
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...