我有一个Seurat单细胞基因表达对象,它有槽。
其中一个插槽是@meta.data
,它是一个矩阵。
我想通过将meta$brain.region
的值指定为一个因子来创建一个$orig.ident列。meta
是我原始的元数据表。
我这样做是为了一堆数据集,并希望使其具有通用性。
其思想是,用户只需输入原始对象的名称,此后的所有内容都将被相应地调用。
用户提示:
> dataset <- "path/to/gw14.RData"
> seurat.obj <- "gw14"
然后加载工作区,其中包括Seurat对象gw14。
> load(dataset)
> seurat.obj.new <- paste0(seurat.obj, ".", 2)
我不明白为什么在这里使用get
会返回下面的错误:
> get(seurat.obj.new)@meta.data$orig.ident <- factor(meta$brain.region)
Error in get(seurat.obj.new)@meta.data$orig.ident = factor(meta$brain.region) :
could not find function "get<-"
然而,在这里使用它可以像预期的那样工作:
> assign(seurat.obj.new, CreateSeuratObject(raw.data = get(seurat.obj)@raw.data,
min.cells = 0, min.genes = 0, project=age))
发布于 2018-08-31 08:20:30
首先,只需编写一个函数,该函数假定您传入了实际的数据对象并返回更新后的数据对象。例如
my_fun <- function(x) {
x@meta.data$orig.ident <- factor(meta$brain.region)
x
}
通常你会这样叫它
gw14.2 <- my_fun(gw14)
注R中的函数应该返回一个值,并返回一个更新值。它们不应该有像创建变量这样的副作用。这应该在用户的控制之下。
如果您确实希望将数据对象作为字符串使用,您可以这样做
seurat.obj <- "gw14"
seurat.obj.new <- paste0(seurat.obj, ".", 2)
assign(seurat.obj.new, my_fun(get(seurat.obj)))
但这种类型的行为与大多数R函数的操作方式并不一致。
https://stackoverflow.com/questions/52105565
复制相似问题