我有一个带有插槽的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))
答案 0 :(得分:1)
首先,只需编写一个函数,假定您传入了实际数据对象并返回了更新的数据对象。例如
my_fun <- function(x) {
x@meta.data$orig.ident <- factor(meta$brain.region)
x
}
然后通常您会这样称呼它
gw14.2 <- my_fun(gw14)
R中的Note函数应返回一个值并返回一个更新的值。它们不应具有创建变量之类的副作用。那应该在用户的控制之下。
如果您确实想将数据对象作为字符串使用,则可以
seurat.obj <- "gw14"
seurat.obj.new <- paste0(seurat.obj, ".", 2)
assign(seurat.obj.new, my_fun(get(seurat.obj)))
但是这种行为与大多数R函数的操作方式不一致。