r语言实现sem_R语言实现扩增子数据抽平算法

本文介绍了作者在使用R语言进行生物信息分析时,发现phyloseq包中的抽平方法并非真正的抽平,而是一种标准化。作者通过查看源代码并进行验证,发现该方法可能导致在序列数量较少时得到非整数结果,影响alpha多样性的计算。因此,作者编写了自己的抽平代码,实现了真正的抽平功能,并希望获得提高运行效率的建议。
摘要由CSDN通过智能技术生成

写在前面

现在是20年2月中旬了,今年注定是不平凡的一年,尽然现在都还在家中。但是任务量还是十分繁重。谁让做生物信息的也不用限制什么地点。

为什么我要实现抽平算法呢?16年phyloseq的出现很对我的胃口,因为扩增子数据本身较小,自R语言中的操作也是基本没障碍,本以为phyloseq中实现了抽平的方法,我没有查看源码,直接采用了,但是最近再做一些项目中发现这个抽平方法是有问题的:

c720f6202deee9fb7f145fd4dab611f2.png

library(tidyverse)
ps = readRDS("../ps_liu.rds")

total = min(sample_sums(ps));total
standf = function(x,t = total)(t*(x/sum(x)))

ps11 = transform_sample_counts(ps,standf);ps11

sample_sums(ps11)


简单看一下似乎结果没设么问题?但是当我想想这种抽平写法,却实在想不通这是怎么抽平的。

KO1   KO2   KO3   KO4   KO5   KO6   OE1   OE2   OE3   OE4   OE5   OE6   WT1   WT2   WT3   WT4   WT5   WT6
32049 32049 32049 32049 32049 32049 32049 32049 32049 32049 32049 32049 32049 32049 32049 32049 32049 32049

于是我打开了源代码;从这里我们就发现,这并不是抽平,只是标准化而已。这也很好的解释了standf = function(x,t = total)(t*(x/sum(x)))这行代码的意义。这只是一中标准化方式,意味着如果序列数量较少,按照所谓phyloseq抽平的方式得到的结果不是整数。

function (physeq, fun, ...)
{
if (!identical(length(fun(1:10)), 10L)) {
stop("`fun` not valid function.")
}
if (taxa_are_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值