首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用字符串变量为对象槽赋值

使用字符串变量为对象槽赋值
EN

Stack Overflow用户
提问于 2018-08-31 05:25:08
回答 1查看 316关注 0票数 0

我有一个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)

代码语言:javascript
运行
复制
Error in get(seurat.obj.new)@meta.data$orig.ident = factor(meta$brain.region) : 
  could not find function "get<-"

然而,在这里使用它可以像预期的那样工作:

代码语言:javascript
运行
复制
> assign(seurat.obj.new, CreateSeuratObject(raw.data = get(seurat.obj)@raw.data, 
                                          min.cells = 0, min.genes = 0, project=age))
EN

回答 1

Stack Overflow用户

发布于 2018-08-31 08:20:30

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

代码语言:javascript
运行
复制
my_fun <- function(x) {
  x@meta.data$orig.ident <- factor(meta$brain.region)
  x
}

通常你会这样叫它

代码语言:javascript
运行
复制
gw14.2 <- my_fun(gw14)

注R中的函数应该返回一个值,并返回一个更新值。它们不应该有像创建变量这样的副作用。这应该在用户的控制之下。

如果您确实希望将数据对象作为字符串使用,您可以这样做

代码语言:javascript
运行
复制
seurat.obj <- "gw14"
seurat.obj.new <- paste0(seurat.obj, ".", 2)
assign(seurat.obj.new, my_fun(get(seurat.obj)))

但这种类型的行为与大多数R函数的操作方式并不一致。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52105565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档