【发布时间】:2020-06-12 20:51:33
【问题描述】:
我正在尝试将复杂的 S4 对象(使用 Seurat 包生成)放入 data.table 中(我读到无法使用列表或data.frame,但我没有找到关于 data.table 与 S4 对象的兼容性的任何信息)取决于它们的属性的 值一个 与函数。 这些对象都来自一个更大的对象,我在我编写的函数中称为数据集:
subsets_by_cluster <- function(dataset){
nclust=data.table(cluster_ID=c(rep(NA,length(unique(dataset@active.ident)))))
for (i in length(nclust)){
nclust[i]=dataset[,dataset@active.ident==unique(dataset@active.ident)[i]]
}
return(nclust)}
我期望得到一个 data.table 中充满了 S4 对象,其中 一列 的 行数与不同 @active.ident 的数量一样多 strong> 值(集群 ID) 但是当我在原始数据集上运行它时,我得到了错误
[<-.data.frame(*tmp*, i, 1, value = new("Seurat", assays = list( : 替换有 2965 行,数据有 1 行) 中的错误
我也试过用这种线手动做
nclust[1]=dataset[,dataset@active.ident==unique(dataset@active.ident)[1]]
但是也没用,提示错误:
类型“S4”不能强制转换为“逻辑”
将子集存储在变量中完美,但我希望我的脚本能够处理不同的簇编号。 我正在考虑编写要读取的文件,以便随后可以读取它们,但这似乎远非最佳解决方案。
你有什么建议吗?
【问题讨论】:
-
我不知道 Seurat 包,但你当然可以制作一个
list的 S4 对象。 -
dataset是什么,它是这些 S4 对象之一吗?还是别的什么? -
谢谢@JohnPaul,但我试过了,但也没有用,出现错误:>
[.Seurat(dataset, , dataset@active.ident == unique(dataset@active) 中的错误.ident)[i]) : 提供给子单元格的逻辑值的数量不正确 当我手动尝试时,我得到了错误:> 不推荐使用 S4 对象的隐式列表嵌入typeof(dataset)给了我“S4”作为输出,但我没有不是自己创建的 -
如果你只做
dataset@active.ident你会得到什么?单个值、向量还是其他? -
dataset@active.ident给出了integer但它就像 5800 个 ID 及其关联的集群。例如,dataset@active.ident[50] 返回第 50 个单元的 ID(我正在做生物信息学)及其关联集群的名称
标签: r data.table iteration embedding s4