如何json序列化ExpressionSet?

如何json序列化ExpressionSet?,r,json,bioconductor,R,Json,Bioconductor,我想用JSON序列化一个。我尝试了以下方法: # create expression set based on the link above library("Biobase") ExpressionSet() ExpressionSet(assayData=matrix(runif(1000), nrow=100, ncol=10)) # update an existing ExpressionSet data(sample.ExpressionSet) updateObject(sa

我想用JSON序列化一个。我尝试了以下方法:

# create expression set based on the link above
library("Biobase")

ExpressionSet()

ExpressionSet(assayData=matrix(runif(1000), nrow=100, ncol=10))

# update an existing ExpressionSet
data(sample.ExpressionSet)
updateObject(sample.ExpressionSet)

# information about assay and sample data
featureNames(sample.ExpressionSet)[1:10]
sampleNames(sample.ExpressionSet)[1:5]
experimentData(sample.ExpressionSet)

# subset: first 10 genes, samples 2, 4, and 10
expressionSet <- sample.ExpressionSet[1:10,c(2,4,10)]
我明白了


有没有办法完成这项工作,或者我必须编写一个自定义序列化程序?

我最终使用了这样一个命名列表:

expressionset_to_json <- function(eset) {

  expression_data <- Biobase::exprs(eset)
  sample_info <- Biobase::pData(eset)
  feature_data <- Biobase::fData(eset)  

  templist = list(
    expression_data=as.data.frame(expression_data),
    sample_info=sample_info,
    feature_data=feature_data
  )

  return(jsonlite::toJSON(templist))
}
屈服

{"expression_data":[{"B":85.7533,"D":135.575,"J":135.608,"_row":"AFFX-MurIL2_at"},{"B":126.196,"D":93.3713,"J":90.4838,"_row":"AFFX-MurIL10_at"},{"B":8.8314,"D":28.7072,"J":34.4874,"_row":"AFFX-MurIL4_at"},{"B":3.6009,"D":12.3397,"J":4.5498,"_row":"AFFX-MurFAS_at"},{"B":30.438,"D":70.9319,"J":46.352,"_row":"AFFX-BioB-5_at"},{"B":25.8461,"D":69.9766,"J":91.5307,"_row":"AFFX-BioB-M_at"},{"B":181.08,"D":161.469,"J":229.671,"_row":"AFFX-BioB-3_at"},{"B":57.2889,"D":77.2207,"J":66.7302,"_row":"AFFX-BioC-5_at"},{"B":16.8006,"D":46.5272,"J":39.7419,"_row":"AFFX-BioC-3_at"},{"B":16.1789,"D":9.7364,"J":0.3988,"_row":"AFFX-BioDn-5_at"}],"sample_info":[{"sex":"Male","type":"Case","score":0.4,"_row":"B"},{"sex":"Male","type":"Case","score":0.42,"_row":"D"},{"sex":"Male","type":"Control","score":0.63,"_row":"J"}],"feature_data":[{"_row":"AFFX-MurIL2_at"},{"_row":"AFFX-MurIL10_at"},{"_row":"AFFX-MurIL4_at"},{"_row":"AFFX-MurFAS_at"},{"_row":"AFFX-BioB-5_at"},{"_row":"AFFX-BioB-M_at"},{"_row":"AFFX-BioB-3_at"},{"_row":"AFFX-BioC-5_at"},{"_row":"AFFX-BioC-3_at"},{"_row":"AFFX-BioDn-5_at"}]}

我想这正是你想要的。我真的不知道这个字段,所以如果JSON对象不符合预期,请发表评论,我可以尝试更新它

我解决这个问题的方法是将
ExpressionSet
类的对象转换为数据帧,这样我们就可以在其上使用
toJSON()
。我在这里找到了这个想法:

#基于上面的链接创建表达式集
图书馆(生物库)
表达式集()
表达式集(分析数据=矩阵(runif(1000),nrow=100,ncol=10))
#更新现有的ExpressionSet
数据(sample.ExpressionSet)
updateObject(sample.ExpressionSet)
#有关分析和样本数据的信息
特征名称(示例表达式集)[1:10]
sampleNames(示例表达式集)[1:5]
实验数据(sample.ExpressionSet)
#子集:前10个基因,样本2、4和10

expressionSet谢谢,最后我使用一个命名列表(见我的答案)做了一些非常类似的事情,它给了我想要的东西。我认为,在您的解决方案中,数据类型的信息会丢失,因为它现在是一个未命名的结构。因此,使用您的表达式返回原始表达式集可能会很棘手(但经过了升级)。@Cleb很高兴您找到了问题的解决方案!当我写我的答案代码时,你对数据类型信息的观点是我没有意识到的,所以感谢你指出这一点。我意识到我们得到的JSON结构也有点不同。您可以使用
toJSON(expressionSet,force=TRUE)
强制未知对象通过。它通常适用于任何类别的计算机object@SymbolixAU:请随意将其添加为实际答案及其输出。非常乐意投票。
expressionset_to_json <- function(eset) {

  expression_data <- Biobase::exprs(eset)
  sample_info <- Biobase::pData(eset)
  feature_data <- Biobase::fData(eset)  

  templist = list(
    expression_data=as.data.frame(expression_data),
    sample_info=sample_info,
    feature_data=feature_data
  )

  return(jsonlite::toJSON(templist))
}
expressionset_to_json(expressionSet)
{"expression_data":[{"B":85.7533,"D":135.575,"J":135.608,"_row":"AFFX-MurIL2_at"},{"B":126.196,"D":93.3713,"J":90.4838,"_row":"AFFX-MurIL10_at"},{"B":8.8314,"D":28.7072,"J":34.4874,"_row":"AFFX-MurIL4_at"},{"B":3.6009,"D":12.3397,"J":4.5498,"_row":"AFFX-MurFAS_at"},{"B":30.438,"D":70.9319,"J":46.352,"_row":"AFFX-BioB-5_at"},{"B":25.8461,"D":69.9766,"J":91.5307,"_row":"AFFX-BioB-M_at"},{"B":181.08,"D":161.469,"J":229.671,"_row":"AFFX-BioB-3_at"},{"B":57.2889,"D":77.2207,"J":66.7302,"_row":"AFFX-BioC-5_at"},{"B":16.8006,"D":46.5272,"J":39.7419,"_row":"AFFX-BioC-3_at"},{"B":16.1789,"D":9.7364,"J":0.3988,"_row":"AFFX-BioDn-5_at"}],"sample_info":[{"sex":"Male","type":"Case","score":0.4,"_row":"B"},{"sex":"Male","type":"Case","score":0.42,"_row":"D"},{"sex":"Male","type":"Control","score":0.63,"_row":"J"}],"feature_data":[{"_row":"AFFX-MurIL2_at"},{"_row":"AFFX-MurIL10_at"},{"_row":"AFFX-MurIL4_at"},{"_row":"AFFX-MurFAS_at"},{"_row":"AFFX-BioB-5_at"},{"_row":"AFFX-BioB-M_at"},{"_row":"AFFX-BioB-3_at"},{"_row":"AFFX-BioC-5_at"},{"_row":"AFFX-BioC-3_at"},{"_row":"AFFX-BioDn-5_at"}]}
# create expression set based on the link above
library(Biobase)

ExpressionSet()

ExpressionSet(assayData=matrix(runif(1000), nrow=100, ncol=10))

# update an existing ExpressionSet
data(sample.ExpressionSet)
updateObject(sample.ExpressionSet)

# information about assay and sample data
featureNames(sample.ExpressionSet)[1:10]
sampleNames(sample.ExpressionSet)[1:5]
experimentData(sample.ExpressionSet)

# subset: first 10 genes, samples 2, 4, and 10
expressionSet <- sample.ExpressionSet[1:10,c(2,4,10)]

# this code is inspired from here: https://support.bioconductor.org/p/77432/
m <- exprs(eset) # matrix of intensities
pdata <- pData(eset) # data.frame of phenotypic information.
d <- cbind(pdata, t(m))

library(jsonlite)
toJSON(d)

[{"sex":"Male","type":"Case","score":0.4,"AFFX-MurIL2_at":85.7533,"AFFX-MurIL10_at":126.196,"AFFX-MurIL4_at":8.8314,"AFFX-MurFAS_at":3.6009,"AFFX-BioB-5_at":30.438,"AFFX-BioB-M_at":25.8461,"AFFX-BioB-3_at":181.08,"AFFX-BioC-5_at":57.2889,"AFFX-BioC-3_at":16.8006,"AFFX-BioDn-5_at":16.1789,"_row":"B"},{"sex":"Male","type":"Case","score":0.42,"AFFX-MurIL2_at":135.575,"AFFX-MurIL10_at":93.3713,"AFFX-MurIL4_at":28.7072,"AFFX-MurFAS_at":12.3397,"AFFX-BioB-5_at":70.9319,"AFFX-BioB-M_at":69.9766,"AFFX-BioB-3_at":161.469,"AFFX-BioC-5_at":77.2207,"AFFX-BioC-3_at":46.5272,"AFFX-BioDn-5_at":9.7364,"_row":"D"},{"sex":"Male","type":"Control","score":0.63,"AFFX-MurIL2_at":135.608,"AFFX-MurIL10_at":90.4838,"AFFX-MurIL4_at":34.4874,"AFFX-MurFAS_at":4.5498,"AFFX-BioB-5_at":46.352,"AFFX-BioB-M_at":91.5307,"AFFX-BioB-3_at":229.671,"AFFX-BioC-5_at":66.7302,"AFFX-BioC-3_at":39.7419,"AFFX-BioDn-5_at":0.3988,"_row":"J"}]