Проблема с lapply с использованием Biomart - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь использовать lapply для изменения названия вида при извлечении всех человеческих генов.

Я все еще учусь пользоваться lapply, я не могу понять, что я делаю неправильно.

Пока у меня есть:

library(biomaRt)

Я создаю витрины:

ensembl_hsapiens <- useMart("ensembl", 
                        dataset = "hsapiens_gene_ensembl")
ensembl_mmusculus <- useMart("ensembl", 
                     dataset = "mmusculus_gene_ensembl")
ensembl_ggallus <- useMart("ensembl",
                       dataset = "ggallus_gene_ensembl")

Устанавливаю виды:

species <- c("hsapiens", "mmusculus", "ggallus")

Затем я пытаюсьчтобы использовать lapply:

species_genes <- lapply(species, function(s) getBM(attributes = c("ensembl_gene_id", 
                                                  "external_gene_name"), 
                                   filters = "biotype", 
                                   values = "protein_coding", 
                                   mart = paste0(s, "_ensembl")))))

Это выдает мне сообщение об ошибке:

Ошибка в martCheck (mart): Вы должны предоставить действительный объект Mart.Для создания объекта Mart используйте функцию: useMart.Проверьте? UseMart для получения дополнительной информации.

1 Ответ

0 голосов
/ 26 апреля 2018

это должно сработать:

species_genes <- lapply(species, function(s) getBM(attributes = c("ensembl_gene_id", 
                                                                  "external_gene_name"), 
                                                   filters = "biotype", 
                                                   values = "protein_coding", 
                                                   mart = get(paste0("ensembl_", s))))

Объяснение:

Аргумент mart в getBM функциях ожидает объект класса Mart, а не string

class(ensembl_ggallus)
#output
[1] "Mart"
attr(,"package")
[1] "biomaRt"

с помощью

paste0("ensembl_", s)

вы получите строку, такую ​​как:

"ensembl_hsapiens"

функция base get ищет объект всреда по имени.

get("ensembl_hsapiens") 

identical(get("ensembl_hsapiens"), ensembl_hsapiens)
#output
TRUE
...