Присвойте значение слоту объекта, используя строковую переменную - PullRequest
0 голосов
/ 31 августа 2018

У меня есть объект экспрессии гена 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))

1 Ответ

0 голосов
/ 31 августа 2018

Сначала просто напишите функцию, которая предполагает, что вы передаете фактический объект данных и возвращает обновленный объект данных. Например

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...