如何解决在R中与biomart循环播放
list.function <- function() {
sample1 <- data.frame(ensembl.id = c("ENSG00000000005.6","ENSG00000000003.15","ENSG00000000419.13","ENSG00000000457.14","ENSG00000000460.17"),counts = c(4,5,6,1,1))
sample2 <- data.frame(ensembl.id = c("ENSG00000000005.6",1))
sample3 <- data.frame(ensembl.id = c("ENSG00000000005.6",1))
sample4 <- data.frame(ensembl.id = c("ENSG00000000005.6",1))
sapply(paste('sample',seq(1,4,1),sep=''),get,environment(),simplify = FALSE)
}
my.list3 <- list.function()
my.list3
library("biomart")
grch38 <- useMart("ensembl",dataset="hsapiens_gene_ensembl")
我正在尝试自动执行此操作:
my.list4 = lapply(my.list3,function(x){
atributos = getBM(attributes = c("ensembl_gene_id_version","external_gene_name","chromosome_name","gene_biotype","entrezgene_description"),filters = "ensembl_gene_id_version",values = x$ensembl.id,mart = grch38)
atributos_unique = atributos %>% distinct(ensembl_gene_id_version,.keep_all = TRUE)
merged = merge(x,atributos_unique,by.x="ensembl.id",by.y="ensembl_gene_id_version" )
merged$gene_biotype = as.factor(merged$gene_biotype)
})
正确使用所有数据集的地方, 但无法正确输出!
我需要“合并的”最终输出对于我的“ my.list3”列表中的每个数据集都是唯一的,并且名称与原始数据集相同。
有什么想法吗?
解决方法
您不会在函数调用中返回数据帧。
library(biomaRt)
library(tidyverse)
grch38 = useMart("ensembl",dataset="hsapiens_gene_ensembl")
my.list4 = lapply(my.list3,function(x){
atributos = getBM(attributes = c("ensembl_gene_id_version","external_gene_name","chromosome_name","gene_biotype","entrezgene_description"),filters = "ensembl_gene_id_version",values = x$ensembl.id,mart = grch38)
atributos_unique = atributos %>%
distinct(ensembl_gene_id_version,.keep_all = TRUE)
merged = merge(x,atributos_unique,by.x="ensembl.id",by.y="ensembl_gene_id_version" )
merged$gene_biotype = as.factor(merged$gene_biotype)
return(merged) #or just merged
})
在函数调用的末尾添加return(merged)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。