【问题标题】:R Error 'Error in seq.default(min(x, na.rm = T), max(x, na.rm = T), length = length(ColRamp)) : 'from' must be a finite number'R错误'seq.default中的错误(min(x,na.rm = T),max(x,na.rm = T),长度=长度(ColRamp)):'来自'必须是有限数'
【发布时间】:2019-11-15 13:21:50
【问题描述】:

我对 R 非常陌生,我有一个矩阵数据集,我想将其绘制为六边形颜色图。我已遵循此页面上概述的代码:

https://www.visualcinnamon.com/2013/11/how-to-create-hexagonal-heatmap-in-r

但是,我不断收到错误消息:

seq.default(min(x, na.rm = T), max(x, na.rm = T), length = length(ColRamp)) : 'from' 必须是有限数另外: 警告信息:在 seq.default(min(x, na.rm = T), max(x, na.rm = T), length = length(ColRamp)) : 强制引入的 NAs

我的代码如下:

    library(RColorBrewer) 
    library(fields) 

    Hexagon <- function (x, y, unitcell = 1, col = col) {
    polygon(c(x, x, x + unitcell/2, x + unitcell, x + unitcell,
        x + unitcell/2), c(y + unitcell * 0.125,
                           y + unitcell * 0.875,
                           y + unitcell * 1.125,
                           y + unitcell * 0.875,
                           y + unitcell * 0.125,
                           y - unitcell * 0.125),
      col = col, border=NA)}

      Heatmap_Matrix = as.matrix("
      3 2   3   4   5   5   5   5
      4 2   3   4   5   5   5   5
      5 0   0   4   5   5   5   5
      7 2   3   8   8   8   8   8
      1 2   3   4   5   5   5   5
      6 0   3   4   5   5   5   5
      1 2   3   9   5   5   5   5
      1 2   3   4   7   7   7   7
      8 2   4   4   5   5   5   5
      1 0   8   4   3   3   3   3
      1 0   3   5   5   5   5   5
      9 2   3   4   5   5   5   5
      1 2   4   4   5   5   5   5
      1 0   3   4   2   2   2   2
      9 2   3   4   5   5   5   5")

      x <- as.vector(Heatmap_Matrix)

       SOM_Rows <- dim(Heatmap_Matrix)[1]
       SOM_Columns <- dim(Heatmap_Matrix)[2]

       par(mar = c(0.4, 2, 2, 7))

       plot(0, 0, type = "n", axes = FALSE, xlim=c(0, SOM_Columns),
       ylim=c(0, SOM_Rows), xlab="", ylab= "", asp=1)

       ColRamp <- rev(designer.colors(n=50, col=brewer.pal(9, "Spectral")))

       ColorCode <- rep("#FFFFFF", length(x)) #default is all white
       Bins <- seq(min(x, na.rm=T), max(x, na.rm=T), length=length(ColRamp))
       for (i in 1:length(x))
       if (!is.na(x[i])) ColorCode[i] <- ColRamp[which.min(abs(Bins-x[i]))]

       offset <- 0.5 
       for (row in 1:SOM_Rows) {
       for (column in 0:(SOM_Columns - 1))
       Hexagon(column + offset, row - 1, col = ColorCode[row + SOM_Rows * column])
       offset <- ifelse(offset, 0, 0.5)
       }  

       image.plot(legend.only=TRUE, col=ColRamp, zlim=c(min(x, na.rm=T), max(x, na.rm=T)))

我对 R 编码了解不多,但我已经尝试了几天来删除错误消息。这可能很简单,但我不知道。我基本上只是从上面的链接中复制了代码。

如果有人知道错误是什么,我将非常感激?

【问题讨论】:

    标签: r numbers colormap


    【解决方案1】:

    我认为这是关于您如何输入Heatmap_Matrix。当我运行str(x) 时,我看到它读作一长串字符(这是引号告诉它的)。用逗号分隔数值是我的常用方法,或者如果数据很多,则将其保存为制表符或逗号分隔的文本文件,例如excel 然后在 R 中用read.csv 等读入。

    【讨论】:

    • 谢谢,迈克尔。我最初尝试将其加载为 txt 文件,但也显示了相同的错误。我将尝试删除引号,看看是否有其他方法可以加载它。我同意这可能是某种输入问题,因为这是我在代码中更改的唯一变量。
    • 您是否清楚str 的作用以及如何解释它?使用一些非常小的文件(例如 2x2 表)来找出从数据移动到 R 的良好管道可能会有所帮助。我很少遇到 read.csv 的问题以获取漂亮的数组或 read.tsv(实际上检查那个名字,它可能是关闭的)对于衣衫褴褛的人。
    • 我之前没用过str。这个函数有什么作用?我将尝试使用一个非常小的矩阵开始,看看是否有帮助。
    猜你喜欢
    • 2016-04-15
    • 2020-12-19
    • 2019-10-04
    • 2014-04-12
    • 2018-01-17
    • 1970-01-01
    • 2018-05-23
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多