Я объясню конечную цель и то, что я пробую в качестве теста в первую очередь.(Потому что я, вероятно, поступаю неправильно).
Я использую пакет phyloseq для визуализации данных микробиома.Я хочу до некоторой степени «автоматизировать» его, заставляя пользователей выбирать уровни анализа и заставлять мой сценарий генерировать визуализации без того, чтобы кто-то вручную печатал в каждой комбинации.
Проблема заключается в передаче переменных в функцию подмножества.Я получаю эти ошибки в первую очередь (в зависимости от того, какие комбинации pas0, eval, parse, as.logical, expression, noquote .... и т. Д., Которые я пробовал):
Error in subset.data.frame(oldDF, ...) : 'subset' must be logical
Error in dimnames(x) <- dn :
length of 'dimnames' [1] not equal to array extent
Пользователь установитуровни анализа.Допустим, на данный момент есть два уровня, и выбор второго уровня автоматически означает, что вы также хотите первый уровень.(Я еще не работал над этой частью, но я хотел объяснить это заранее.
#Set lineage level
lin_level <- 1
lin_list <- c("k__Kingdom", "p__Phylum","c__Class", "o__Order","f__Family")
lin_select <- lin_list[lin_level]
sub_lin <- lin_list[(lin_level +1)]
#Kingdom
king_list <- "k__Bacteria"
#set Phylum list
if (lin_select == "p__Phylum"){
phylum_list <- c("p__Firmicutes","p__Proteobacteria","p__Bacteroidetes","p__Actinobacteria","p__Tenericutes")
}
subgroup <- "All"
С этого момента скрипт в конечном итоге попадет в секцию построения графиков. Если lin_level установлен в 1, он будетвыглядит следующим образом:
FIXED
gphic = subset_taxa(physeq1, Kingdom=="k__Bacteria")
title = paste0(subgroup," ", "Bacteria-only")
plot_bar(gpsfb, "Phylum", "Abundance", "Phylum",
title=title, facet_grid="Type~.")
AUTOMATED
gphic = subset_taxa(physeq1, (substring(lin_select,4)) == king_list)
title = paste0(subgroup," ", (substring(king_list,4)),"-only")
plot_bar(gpsfb, (substring(sub_lin,4)), "Abundance", (substring(sub_lin,4)),
title=title, facet_grid="Type~.")
Но при попытке передать (substring (lin_select, 4)) == king_list в качестве аргумента возникает ошибка.
Я искал в различных потокахпо этому вопросу, но я не смог получить разные ответы для работы. В конечном счете мне нужно запустить графическую секцию один раз для Королевства, а затем снова каждый раз для каждого элемента в списке Типа. Но прежде чем я смогу туда добраться,Мне нужно иметь возможность передавать аргументы в функцию подмножества.
Вещи, которые я пробовал:
test <- paste0(substring(lin_select,4),"==","\"","p__Bacteroidetes","\"")
noquote(test)
[1] Phylum=="p__Bacteroidetes"
gphic = subset_taxa(physeq1, noquote(test))
Error in subset.data.frame(oldDF, ...) : 'subset' must be logical
gphic = subset_taxa(physeq1, paste0(substring(lin_select,4),"==","\"","p__Bacteroidetes","\""))
Error in subset.data.frame(oldDF, ...) : 'subset' must be logical
gphic = subset_taxa(physeq1, as.logical(test))
Error in dimnames(x) <- dn :
length of 'dimnames' [1] not equal to array extent
as.logical(noquote(test))
[1] NA
gphic = subset_taxa(physeq1, as.logical(noquote(test)))
Error in dimnames(x) <- dn :
length of 'dimnames' [1] not equal to array extent
noquote(test)
[1] Phylum=="p__Bacteroidetes"
as.logical(noquote(test))
[1] NA
as.logical(as.character(noquote(test)))
[1] NA
test2 <- eval(parse(text= test))
Error in eval(parse(text = test)) : object 'Phylum' not found
test2 <- eval(test)
gphic = subset_taxa(physeq1, as.logical(test2))
Error in dimnames(x) <- dn :
length of 'dimnames' [1] not equal to array extent
as.logical(test2)
[1] NA
И множество других перестановок, пытающихся перейти в разные вещи, но выполучить представление.