【发布时间】:2022-01-06 15:00:24
【问题描述】:
我一直在尝试对我的 seurat 对象进行随机二次采样。 我对基于 2 列的子采样感兴趣:条件和单元格类型。我有 5 个条件和 5 种细胞类型。主要目标是在每种条件下为每种细胞类型提供 1000 个细胞。 到目前为止我已经尝试过了:
第一件事是对我的 seurat 对象进行子集化:
my.list <- list(hipo.c1.neurons = hipo %>%
subset(., condition %in% "c1" & group %in% "Neurons"),
hipo.c1.oligo = hipo %>%
subset(., condition %in% "c1" & group %in% "Oligod")...etc...)
然后使用采样函数对其进行二次采样:
set.seed(0)
my.list.sampled <- lapply(X = my.list, FUN = function(x) {
x <- x[,sample(ncol(x), 1000, replace = FALSE)]
})
我收到此错误,因为有些对象的单元格少于 1000 个:在为函数“[”选择方法时评估参数“j”时出错:当 '替换 = FALSE'
然后我尝试了这个功能:
lapply_with_error <- function(X,FUN,...){
lapply(X, function(x, ...) tryCatch(FUN(x, ...),
error = function(e)NULL))
}
但是在那些单元格少于 1000 个的对象中,它给了我 0。跳过那些单元格少于 1000 个的对象并保持原样(不对那些对象进行采样)的方法是什么? 有没有更简单的方法可以做到这一点,这样我就不必单独对所有对象进行子集化?
【问题讨论】: