0

我有一个 Seurat 单细胞基因表达对象,它有插槽。

其中一个槽是@meta.data,它是一个矩阵。

我想创建一个列 $orig.ident 通过为其分配值meta$brain.region作为一个因素。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))
4

1 回答 1

1

首先,只需编写一个函数,假设您传入实际数据对象并返回更新的数据对象。例如

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 函数的操作方式不一致。

于 2018-08-31T00:20:30.290 回答