- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在工作中经常使用 phyloseq
。我的数据集通常包含多个条件或参数,需要以相同的方式进行分析(例如夏季或冬季的细菌以及 Lake1 或 Lake2 的相同图),因此我想为此使用函数。我写了一个子集函数,它允许我通过循环组合多个参数。输出存储在列表中以供进一步分析。
但是,这看起来很笨拙。所以我的第一个问题是关于功能的改进。
1) 具体来说,我想知道
a) 使用多个for 循环
来生成子集是个好主意。
b) 此外,for loops
和 lapply
的组合可以优化。和
c) 也许有更好的方法来防止现有列表再次无法识别地附加相同对象的新迭代?我实现了这个,因为在开发代码时我有很多很多测试执行
这里讨论了 for 循环是否比一般的 apply 慢:lapply vs for loop - Performance R
我认为 phyloseq
在内部调用 which
,因此它不必是特定于 phyloseq
的解决方案。
2) 我的第二个问题是,如果并非所有搜索参数都存在于所有子集中,如何处理这种情况?所以在下面的例子中,如果没有丹麦男性,“丹麦”和“M”的组合就会中断。我想避免这种情况,在这个例子中只有 3 个(丹麦 x F、美国 x F、美国 x M)而不是 4 个子集。目前,该函数需要适应每个特殊的子集,这首先破坏了编写它的目的。
library(phyloseq)
data(enterotype)
# reduce the size of the data set
phyloseq <- filter_taxa(enterotype, function (x) {sum(x > 0.001) >= 1}, prune = TRUE)
# arguments for the subsetting function
phyloseq_object <- phyloseq
Nationality <- c("american", "danish")
Gender <- c("F", "M")
# define a function to obtain sample subsets from the phyloseq object
# per combination of parameters
get_sample_subsets <- function(phyloseq_object, nation, gender) {
sample_subset <- sample_data(phyloseq_object)[ which(sample_data(phyloseq_object)$Nationality == nation &
sample_data(phyloseq_object)$Gender == gender),]
phyloseq_subset <- merge_phyloseq(tax_table(phyloseq_object),
otu_table(phyloseq_object),
#refseq(phyloseq_object),
sample_subset)
phyloseq_subset2 <- filter_taxa(phyloseq_subset, function (x) {sum(x > 0) >= 1 }, prune = TRUE)
return(phyloseq_subset2)
}
# here we pass the arguments for subsetting over two for loops
# to create all possible combinations of the subset parameters etc.
# the subsets are stored within a list, which has to be empty before running the loops
sample_subset_list <- list()
if(length(sample_subset_list) == 0) {
for (nations in Nationality) {
for (gender in Gender) {
tmp <- get_sample_subsets(phyloseq_object = phyloseq_object,
nation = nations, gender = gender)
sample_subset_list[[paste(nations, gender, sep = "_")]] <- tmp
}
}
print(sample_subset_list)
} else {
print("list is not empty, abort to prevent appending...")
}
# You could now for example use the output to calculate ordinations for each subset (this data set has too few entries per subset for that)
# create a list where the distance metrics for the sample subsets are stored
ordination_nmds <- list()
ordination_nmds <- lapply(sample_subset_list, ordinate, method = "NMDS",
dist = "bray", try = 100, autotransform = TRUE)
最佳答案
适用于 S3 但不适用于 S4(见评论)
由于我不熟悉 S4,如果有更好的结果,我可能会删除这个答案。
根据我的评论,这里可能会对您有所帮助。如果您需要更好的解决方案或者它不能解决您的问题,请告诉我。
# I changed the data because "phyloseq" package require further install
ex_data = mtcars
# this line might replace your "get_sample_subsets" function and your loop to check if they are empty lists
# You can modify the elements inside list(...) to get the wanted subsets, it is very flexible
sampled_data = split(ex_data, list(ex_data$cyl, ex_data$vs), drop = TRUE) # note the drop = TRUE, to avoid "empty" elements
关于r - R phyloseq 中的有效子集忽略丢失的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58560139/
我在工作中经常使用 phyloseq。我的数据集通常包含多个条件或参数,需要以相同的方式进行分析(例如夏季或冬季的细菌以及 Lake1 或 Lake2 的相同图),因此我想为此使用函数。我写了一个子集
我想修改由 phyloseq 包生成的图(从 github 下载)。 Phyloseq 图是 ggplot2 对象,所以我认为我可以通过将 ggplot2 对象添加到 phyloseq 创建的对象
mapfile = "map_soil_final3.txt" map = import_qiime_sample_data(mapfile) print(map) tree = read_tree(
我正在遵循此处描述的工作流程 https://f1000research.com/articles/5-1492/v2使用示例数据以及我自己的数据。这工作正常,但现在我无法生成 OTU 表,其中包含诸
我是一名优秀的程序员,十分优秀!