gpt4 book ai didi

R:有时 system.file 无法按文档工作

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

system.file我的包示例中的命令有时会意外地失败,而在其他时候却会通过。我不理解为什么。

我通常使用:

> system.file("examples", "trees.xml", package="RNeXML", mustWork=TRUE)

这通常有效,但有时会失败(即使在交互式 session 中):
Error in system.file("examples", "trees.xml", package = "RNeXML", mustWork = TRUE) : 

没有找到文件

当它失败时,我可以让它工作:
> system.file("examples", "trees.xml", lib.loc = .libPaths()[1], package="RNeXML", mustWork=TRUE)
[1] "/home/cboettig/R/x86_64-pc-linux-gnu-library/3.0/RNeXML/examples/trees.xml"

这对我来说没有任何意义,因为 system.file 的文档说它会检查 libPaths如果 lib.loc 没有值,则自动提供。

那么,如果我给出 .libPaths()[1],它为什么会起作用?明确的?

似乎明确告诉我的包使用第一个路径, .libPaths()[1] ,会不太稳定。

最佳答案

因为这是一个 heisenbug , 设置 options(error = recover)当提示输入帧数时,选择一个让您进入 system.file 的帧数。 . (有关我将要解释的更多信息,请参阅 Hadley 的 Exceptions and Debugging tutorial 。)然后逐步使用调试器并确定是否 packagePath使用 find.package(package, lib.loc, quiet = TRUE) 正确加载.我检查了后一个函数并没有立即发现任何错误,因此它可能是特定于系统的。你能发一下你的sessionInfo()吗? ?

packagePath很好,那么答案就在 system.file 的其余部分中 body :

FILES <- file.path(packagePath, ...)
present <- file.exists(FILES)
if (any(present))
FILES[present]
else ""

这将使我们的生活变得非常艰难,因为我怀疑这些功能中的任何一个都存在问题。如 packagePath不是您所期望的,您可以使用 recover帧数提示再次潜回 system.file ,这次输入 debug(find.package)这样您就可以逐步执行该功能。检查 dirspathsfor (lib in lib.loc) ,并逐步通过少数 if s 随之而来。

如果这些都不起作用,并且您没有发现任何恶作剧(这对于逐步调试器的透明度来说非常困难),您可以随时尝试 dump.frames 并为我们上传文件。我不确定它会有多大用处,因为即使我们安装相同的软件包,也可能存在路径问题,但值得一试。

最后,如果您不关心上述所有内容,那么有效的 hack 将是:
trees_path <- ""
for(lib in .libPaths()) {
trees_path <- system.file("examples", "trees.xml", lib.loc = lib, package="RNeXML", mustWork = FALSE)
if (trees_path != "") break;
}
if (trees_path == "") stop("examples/trees.xml not found using any library paths")

关于R:有时 system.file 无法按文档工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22572832/

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