gpt4 book ai didi

r - 在 R 3.0.0 for Windows 中使用 {diagram} 的流程图

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

我正在尝试使用图表包(v 1.6)在 R 中重新制作流程图。我能够使用这个确切的脚本(我根据图表文档中的示例进行修改)制作图表,但是一旦我将 R 更新到 3.0.0,坐标函数就会出现错误。这是一个例子:

library(graphics)
library(diagram)

par(mar = c(1, 1, 1, 1))
openplotmat()
elpos<-coordinates(c(1,1,2,4))

Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘coordinates’ for signature ‘"numeric"’

我对 R 和代码等还很陌生,所以当我运行traceback() 时,我真的不明白它在告诉我什么:

3: stop(gettextf("unable to find an inherited method for function %s for signature %s", 
sQuote(fdef@generic), sQuote(cnames)), domain = NA)
2: (function (classes, fdef, mtable)
{
methods <- .findInheritedMethods(classes, fdef, mtable)
if (length(methods) == 1L)
return(methods[[1L]])
else if (length(methods) == 0L) {
cnames <- paste0("\"", sapply(classes, as.character),
"\"", collapse = ", ")
stop(gettextf("unable to find an inherited method for function %s for signature %s",
sQuote(fdef@generic), sQuote(cnames)), domain = NA)
}
else stop("Internal error in finding inherited methods; didn't return a unique method",
domain = NA)
})(list("numeric"), function (obj, ...)
standardGeneric("coordinates"), <environment>)
1: coordinates(c(1, 1, 2, 4))

大多数情况下,我不知道为什么坐标()在更新后不起作用。任何对此的见解,以及可能的回溯翻译都会有很大的帮助。谢谢!

最佳答案

我无法回答这个问题,也无法回答这个问题。最初,我无法重现您的错误:

library(diagram)
openplotmat()
(elpos1 <- diagram::coordinates(c(1,1,2,4)))
# [,1] [,2]
# [1,] 0.500 0.875
# [2,] 0.500 0.625
# ...

查找同名函数

但是,寻找坐标函数的其他实例揭示了一些东西:

help.search('coordinates', fields='name')
# Help files with name matching 'coordinates' using fuzzy matching:
#
# diagram::coordinates coordinates of elements on a plot
# sp::coordinates-methods retrieve (or set) spatial coordinates
# sp::coordinates sets spatial coordinates to create spatial data, or retrieves spatial
# coordinates
# sp::coordnames retrieve or assign coordinate names for classes in sp

此输出搜索所有已安装(不一定已加载)的软件包。由此看来,sp 也有一个。在您的用例中使用其版本会产生错误。

包加载顺序(或屏蔽函数)

包的加载顺序很重要,因为后来加载的函数中的函数会屏蔽先前加载的包中的同名函数。具体来说:

# ensure we have neither package loaded
detach(package:diagram, unload=TRUE) # ignore errors if not loaded
detach(package:sp, unload=TRUE) # ignore errors if not loaded
library(diagram)
library(sp)
# Attaching package: 'sp'
#
# The following object is masked from 'package:diagram':
#
# coordinates

此消息告诉您,对 coordinates() 的简单调用将使用 sp 中的版本,而不是 diagram 中的版本。 (对于下面的每个代码块,我使用上面的 detach() 来确保包及其 namespace 都不存在。)

使用 sp 版本会产生与您在按以下顺序加载库后遇到的相同错误:diagramsp:

library(diagram)
library(sp)
# Attaching package: 'sp'
#
# The following object is masked from 'package:diagram':
#
# coordinates
(elpos <- coordinates(c(1,1,2,4)))
# Error in (function (classes, fdef, mtable) :
# unable to find an inherited method for function 'coordinates' for signature '"numeric"'

traceback() 与您提供的内容相同。

反转加载顺序有效:

library(sp)
library(diagram)
# Attaching package: 'diagram'
#
# The following object is masked from 'package:sp':
#
# coordinates
(elpos <- coordinates(c(1,1,2,4)))
# [,1] [,2]
# [1,] 0.500 0.875
# [2,] 0.500 0.625
# ...

请注意,警告现在告诉您 sp::coordinates() 现已被屏蔽。

如有疑问,要明确

如果对调用哪个版本有任何疑问,我们总是可以强制我们打算使用哪个版本:

(elpos <- diagram::coordinates(c(1,1,2,4)))
# [,1] [,2]
# [1,] 0.500 0.875
# [2,] 0.500 0.625
# ...

我觉得将其作为答案发布有点不太合适,因为我正在解决您的问题,而不一定是所陈述的问题。如果您仍然需要寻找 traceback() 的结果,请继续提示答案。不过,在这项工作中,我找不到 .findInheritedMethods(),但当 diagram::coordinates 需要一个指定元素数量的向量时,这是有意义的在每行或具有元素位置的 2 列矩阵中,或“NULL”,而 sp::coordinates 期望从类“Spatial”派生的对象 (这绝对不是一个简单的向量)。

关于r - 在 R 3.0.0 for Windows 中使用 {diagram} 的流程图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16019464/

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