【问题标题】:create a heatmap using R with 3 columns data使用具有 3 列数据的 R 创建热图
【发布时间】:2021-02-04 06:12:25
【问题描述】:

我正在尝试使用 R 和如下所示的 csv 文件创建热图:

我可以加载文件,转换为矩阵,但是当我调用 heatmap 时会出错: 热图错误(as.matrix(vals)):“x”必须是数字矩阵。 如果我删除列 ColName 它可以工作,但我不知道值在哪里。

谁能给我一个关于如何制作热图的想法,我可以在每行的前面或结尾同时拥有值和 Colname 吗? 这是我正在使用的行: vals <- read.csv(file = 'file.csv') heatmap(as.matrix(vals)) error in heatmap(as.matrix(vals)) : 'x' must be a numeric matrix

非常感谢

劳尔

【问题讨论】:

  • 您应该提供一个最小可重现示例。 stackoverflow.com/help/minimal-reproducible-example>.

标签: r heatmap


【解决方案1】:

矩阵是定义了维度(行和列)的单一类型(例如数字)的数据对象。 这与 data.frame 不同,后者是一个数据对象,其中每一列都可以是不同的类型。

con <- textConnection("
ColName,Val1,Val2
abc,0.22,0.86
def,2.41,1.09
ghi,3.13,1.50")
# data imported as a data.frame
vals <- read.csv(con)
# column_to_rownames from package tibble 
# adds rownames to a data.frame using a column
vals_matrix <- as.matrix(tibble::column_to_rownames(vals, var = "ColName"))
vals_matrix
#     Val1 Val2
# abc 0.22 0.86
# def 2.41 1.09
# ghi 3.13 1.50
heatmap(x = vals_matrix, margins = c(10, 10))

【讨论】:

    【解决方案2】:

    要成功创建热图,矩阵需要完全为数字。从技术上讲,您有一个数据框(即异构数据结构;具有数字和分类元素的结构)。下面的代码使用所有基本的 R 命令和语法。我还附上了视觉输出。

    dat <- data.frame(
      ColName = c("abc", "def", "ghi"),
      Val1 = c(0.22, 2.41, 3.13),
      Val2 = c(0.86, 1.09, 1.50)
    )
    
    heatmap(as.matrix(dat[, 2:3]), labRow = dat[, 1], Rowv = NA, Colv = NA)
    

    【讨论】:

      【解决方案3】:

      您的 csv 应该只包含数字变量。热图函数需要一个矩阵而不是数据框。如果它是一个数据框,则使用 as_matrix(vals) 将其转换为矩阵: 示例:

      vals <- matrix(c(0.22, 2.41, 3.13, 0.86, 1.09, 1.50), nrow = 2, ncol = 3)
      rownames(vals) <- c("val1", "val2")
      colnames(vals) <- c("abc", "def", "ghi")
      heatmap(vals)
      

      【讨论】:

        猜你喜欢
        • 2017-07-16
        • 2021-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        • 2017-06-15
        相关资源
        最近更新 更多