使用字符串变量将值分配给对象插槽

时间:2018-08-30 21:25:08

标签: r object character bioinformatics assign

我有一个带有插槽的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))

1 个答案:

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