gpt4 book ai didi

r - heatmap.2 中的错误(gplots)

转载 作者:行者123 更新时间:2023-12-02 04:55:55 25 4
gpt4 key购买 nike

我已转移到新服务器并在其上安装了 R 版本 3.0。(gplots 库在 2.14 中不再可用)

使用适用于 2.14 版本的脚本,我现在在生成热图时遇到问题。

在 R 版本 3 中,我收到错误:

Error in lapply(args, is.character) : node stack overflow
Error in dev.flush() : node stack overflow
Error in par(op) : node stack overflow

在 R 版本 2.14 中,我收到错误:

Error: evaluation nested too deeply: infinite recursion / options(expressions=)?

我可以通过增加选项(表达式=500000)来解决

在 R 版本 3 中,增加此选项并不能解决问题。我仍然遇到同样的错误。

两者的脚本相同:

y=read.table("test", row.names=1, sep="\t", header=TRUE)
hr <- hclust(dist(as.matrix(y)))
hc <- hclust(dist(as.matrix(t(y))))
mycl <- cutree(hr, k=7); mycolhc <- rainbow(length(unique(mycl)), start=0.1, end=0.9); mycolhc <- mycolhc[as.vector(mycl)]

install.packages("gplots")
library("gplots", character.only=TRUE)
myheatcol <- redgreen(75)

pdf("heatmap.pdf")
heatmap.2(as.matrix(y), Rowv=as.dendrogram(hr), Colv=as.dendrogram(hc), col=myheatcol,scale="none", density.info="none", trace="none", RowSideColors=mycolhc, labRow=FALSE)
dev.off()

其中“test”是一个带有标题和行名称以及 40*5000 0/1 矩阵的 tdl 文件

如有任何帮助,我们将不胜感激

PS:当我将数据集减少到 2000 行时,我不再收到错误。

PSS:将数据集增加到 2500 行会导致相同的错误;然而,删除所有非信息行(全 1)后,我只剩下了 3700 行。使用此数据集不会导致错误。

最佳答案

我是 gplots 包的作者。当字节编译函数有太多递归调用时,会发生“节点堆栈溢出”错误。

在这种情况下,会发生这种情况,因为绘制树状图对象的函数 (stats:::plotNode) 是使用递归算法实现的,并且树状图对象是深度嵌套的。

最终,正确的解决方案是修改plotNode使用迭代算法,这样可以防止出现递归深度错误。

在短期内,可以通过令人讨厌的 hack 强制 stats:::plotNode 作为解释代码运行,而不是字节编译代码。

这是食谱:

## Convert a byte-compiled function to an interpreted-code function 
unByteCode <- function(fun)
{
FUN <- eval(parse(text=deparse(fun)))
environment(FUN) <- environment(fun)
FUN
}

## Replace function definition inside of a locked environment **HACK**
assignEdgewise <- function(name, env, value)
{
unlockBinding(name, env=env)
assign( name, envir=env, value=value)
lockBinding(name, env=env)
invisible(value)
}

## Replace byte-compiled function in a locked environment with an interpreted-code
## function
unByteCodeAssign <- function(fun)
{
name <- gsub('^.*::+','', deparse(substitute(fun)))
FUN <- unByteCode(fun)
retval <- assignEdgewise(name=name,
env=environment(FUN),
value=FUN
)
invisible(retval)
}

## Use the above functions to convert stats:::plotNode to interpreted-code:
unByteCodeAssign(stats:::plotNode)

## Now raise the interpreted code recursion limit (you may need to adjust this,
## decreasing if it uses to much memory, increasing if you get a recursion depth error ).
options(expressions=5e4)

## heatmap.2 should now work properly
heatmap.2( ... )

关于r - heatmap.2 中的错误(gplots),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16559250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com