没有方法将这个S4类强制转换为使用mclust的向量

时间:2016-06-29 14:43:57

标签: r bioconductor coercion

我试图在 .FCS 格式文件(这是一个流式细胞仪格式文件)上使用 mclust 方法,我将此文件读入R作为flowFrame对象。

install.packages("openCyto") # since the old version sefaulted my R session
library( openCyto )
library(  flowCore)
library(  mclust)

 trial1=read.FCS("export_Alcina TregMAIT_AV 10-1974 P1_CD4.fcs") 
 a=as.matrix(trial1)

编者注:其中一些是Bioconductor软件包,您应该根据该环境的帮助页面进行安装。

但是,mclust不接受.fcs文件作为矩阵&我尝试将其转换为函数 as.matrix 的矩阵,我收到此错误:

Error in as.vector(data) :
  no method for coercing this S4 class to a vector

我发现了类似的问题,他们解释说你必须将importMethodsFrom(S4Vectors,as.matrix)添加到我mclust的NAMESPACE中。我也在mclust的NAMESPACE中做过importMethodsFrom(BiocGenerics,as.vector)。但是,我仍然无法使用mclust

P.S。任何建议或阅读将不胜感激!

如果有人知道其他使用GMM模型的聚类方法可以接受.FCS格式而不进行转换,我会非常高兴。

1 个答案:

答案 0 :(得分:0)

我已经编辑了您的问题,以显示您原本应该完成的工作,以及之后没有做过的事情(而不是在评论中包含代码,您应该通过编辑问题进行回复,具体建议。 )我的回答基于flowCore::read.FCS中的第一个示例(因为您还没有包含指向从磁盘加载的数据集的指针),而不是" trial1"我将指的是" samp"对象我运行该代码。

" samp" object现在从classstr返回此内容:

> class(samp)
[1] "flowFrame"
attr(,"package")
[1] "flowCore"
str(samp)
Formal class 'flowFrame' [package "flowCore"] with 3 slots
  ..@ exprs      : num [1:10000, 1:8] 382 628 1023 373 1023 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : NULL
  .. .. ..$ : Named chr [1:8] "FSC-H" "SSC-H" "FL1-H" "FL2-H" ...
  .. .. .. ..- attr(*, "names")= chr [1:8] "$P1N" "$P2N" "$P3N" "$P4N" ...
  .. ..- attr(*, "ranges")= num [1:8] 1023 1023 10000 10000 10000 ...
  ..@ parameters :Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
  .. .. ..@ varMetadata      :'data.frame': 5 obs. of  1 variable:
  .. .. .. ..$ labelDescription: chr [1:5] "Name of Parameter" "Description of Parameter" "Range of Parameter" "Minimum Parameter Value after Transforamtion" ...
  .. .. ..@ data             :'data.frame': 8 obs. of  5 variables:
  .. .. .. ..$ name    :Class 'AsIs'  Named chr [1:8] "FSC-H" "SSC-H" "FL1-H" "FL2-H" ...
  .. .. .. .. .. ..- attr(*, "names")= chr [1:8] "$P1N" "$P2N" "$P3N" "$P4N" ...
  .. .. .. ..$ desc    :Class 'AsIs'  Named chr [1:8] "FSC-H" "SSC-H" NA NA ...
  .. .. .. .. .. ..- attr(*, "names")= chr [1:8] "$P1S" "$P2S" "$P3S" "$P4S" ...
  .. .. .. ..$ range   : num [1:8] 1024 1024 1024 1024 1024 ...
  .. .. .. ..$ minRange: num [1:8] 0 0 1 1 1 0 1 0
  .. .. .. ..$ maxRange: num [1:8] 1023 1023 10000 10000 10000 ...
  .. .. ..@ dimLabels        : chr [1:2] "rowNames" "columnNames"
  .. .. ..@ .__classVersion__:Formal class 'Versions' [package "Biobase"] with 1 slot
  .. .. .. .. ..@ .Data:List of 1
  .. .. .. .. .. ..$ : int [1:3] 1 1 0
  ..@ description:List of 164
  .. ..$ FCSversion                : chr "2"
  .. ..$ $BYTEORD                  : chr "4,3,2,1"
  .. ..$ $DATATYPE                 : chr "F"
  #----- output truncated -----------

所以" samp"在任何意义上都不是矩形对象,而是一个复杂的列表,在属性中包含许多相关信息。我的猜测是你希望@ exprs节点中 的信息是矩阵。

另一个困难是mclust包中没有ma mclust功能,虽然查看?mclust我们确实看到了一个示例,演示了如何使用Mclust函数。 R坚持正确的函数名称大写是不可原谅的。

Mclust(exprs(samp)[1:100,])
#-----------
'Mclust' model object:
 best model: ellipsoidal, equal orientation (VVE) with 4 components