提取仅数字列,然后将该矩阵传递给R中的heatmap()

时间:2012-08-08 03:49:55

标签: r correlation heatmap

我使用了以下代码:

data<-read.csv('/Users/mf/Desktop/acceptor.csv')
just_nums<-sapply(data,is.numeric)
just_nums_data<-data[,just_nums]
str(just_nums_data)
heatmap(just_nums_data)

但得到了这个输出:

data<-read.csv('/Users/mf/Desktop/acceptor.csv')
just_nums<-sapply(data,is.numeric)
just_nums_data<-data[,just_nums]
str(just_nums_data)
'data.frame':   622 obs. of  16 variables:
 ID                                 : int  1 2 4 5 6 7 8 9 10 11 ...
 QnWeight_initial                   : int  158 165 137 129 155 150 119 153 137 153 ...
 QnWeight_initial_mg                : num  15.8 16.5 13.7 12.9 15.5 15 11.9 15.3 13.7 15.3   ....
 Days_till_1st_Wrkr                 : int  NA 21 NA 26 NA 23 22 20 22 NA ...
 Days_before_max_Wrkr_Eclosion      : int  NA 12 NA 7 NA 10 11 13 11 NA ...
 Wrkr_Eclosion_Bin                  : int  NA 3 NA 1 NA 1 2 3 2 NA ...
 QnMass_At_Wrkr_Eclosion            : int  NA 83 NA 73 NA 67 53 78 56 NA ...
 ColonyMass_At_Wrkr_Eclosion        : int  NA 117 NA 53 NA 91 85 111 96 NA ...
 Adult_Wrkrs_At_Wrkr_Eclosion       : int  NA 9 NA 5 NA 1 7 3 2 NA ...
 Mature_Brood_At_Wrkr_Eclosion      : int  NA 25 NA 13 NA 17 18 27 28 NA ...
 Sum_wrkrsPlusBrood_At_Wrkr_Eclosion: int  0 34 0 18 0 18 25 30 30 0 ...
QnMass_2wksLater                   : int  NA 124 NA NA NA 111 NA NA NA NA ...
QnMass_4wksLater                   : int  NA 117 NA NA NA 88 NA NA NA NA ...
ColonyMass_4wksLater               : int  NA 571 NA NA NA 736 NA NA NA NA ...
QnMass_2mnthsLater                 : int  NA 118 NA NA NA 86 NA NA NA NA ...
ColonyMass_2mnthsLater             : int  NA 445 NA NA NA 1817 NA NA NA NA ...
heatmap(just_nums_data)
Error in heatmap(just_nums_data) : 'x' must be a numeric matrix

我想我的困惑在于“int”类型满足is.numeric()但在传递给heatmap()时不算作数字。这有什么不对吗?

1 个答案:

答案 0 :(得分:4)

  • heatmap要求x为数字矩阵(请参阅?heatmap)。
  • 使用is.numeric(x)对此进行测试 或者更具体地说是具有2维的numeric对象
    • length(di <- dim(x)) != 2 || !is.numeric(x)
  • data.frame不是数字矩阵,即使所有列都是数字

例如:

.d <- data.frame(x= 1:10, y = runif(10))
is.numeric(.d) 
## [1] FALSE

所以,你需要运行

heatmap(as.matrix(just_nums_data))