任何时候我都试图在R中导入一个包,它最终会崩溃。为了说明,如果我在终端中运行library(broom)
之类的命令,则会产生以下错误:
*** caught segfault ***
address 0x18, cause 'memory not mapped'
Traceback:
1: dyn.load(file, DLLpath = DLLpath, ...)
2: library.dynam(lib, package, package.lib)
3: loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]])
4: namespaceImport(ns, loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]), from = package)
5: loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]])
6: namespaceImport(ns, loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]), from = package)
7: loadNamespace(package, lib.loc)
8: doTryCatch(return(expr), name, parentenv, handler)
9: tryCatchOne(expr, names, parentenv, handlers[[1L]])
10: tryCatchList(expr, classes, parentenv, handlers)
11: tryCatch({ attr(package, "LibPath") <- which.lib.loc ns <- loadNamespace(package, lib.loc) env <- attachNamespace(ns, pos = pos, deps)}, error = function(e) { P <- if (!is.null(cc <- conditionCall(e))) paste(" in", deparse(cc)[1L]) else "" msg <- gettextf("package or namespace load failed for %s%s:\n %s", sQuote(package), P, conditionMessage(e)) if (logical.return) message(paste("Error:", msg), domain = NA) else stop(msg, call. = FALSE, domain = NA)})
12: library(broom)
Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
此错误后面是我的R在我的终端崩溃。此外,此结果在RStudio中复制,如果我尝试导入包,则必须重新打开整个程序。有趣的是,并非所有包的行为都相同。当我导入基本软件包(例如library(stats)
或library(base)
)时,它可以正常工作。
我尝试从我的计算机上卸载R,Rstudio和相关的R软件包,然后重新安装它们(按照https://support.rstudio.com/hc/en-us/community/posts/115007714568-Latest-version-of-Rstudio-rmarkdown-causing-abort-on-R-version-3-4-0-for-x86-64-apple-darwin15-6-0-64-bit-),但没有成功。这是一个与我的PATH变量设置有关的问题吗?
为了记录,我在Mac OSX-10.12 Sierra上运行R-3.4。
更新
这可能不那么重要,但我决定环顾四周,看看我的软件包安装在哪里,将它们全部放在R(ip<-as.data.frame(installed.packages())
)的数据框中,我注意到我的软件包存储在两个不同的文件路径 - /Users/bob/Library/R/3.4/library
或/Library/Frameworks/R.framework/Versions/3.4/Resources/library
。有没有人认为这种差异是我R一直崩溃的原因?
答案 0 :(得分:1)
在确定我已经安装了下载到两个不同库的软件包之后(参见上面的问题更新部分),我决定删除我安装的所有软件包。使用此源(https://www.r-bloggers.com/how-to-remove-all-user-installed-packages-in-r/)作为我的向导,我执行了以下命令:
ip <- as.data.frame(installed.packages())
ip <- ip[!(ip[,"Priority"] %in% c("base", "recommended")),]
ip <- subset(ip, !grepl("MRO", ip$LibPath))
path.lib <- unique(ip$LibPath)
pkgs.to.remove <- ip[,1]
sapply(pkgs.to.remove, remove.packages, lib = path.lib)
此外,我还删除了文件夹Users/bob/Library/R/3.4/library
中的所有剩余包,然后我只将我的一个库设置为已安装包下载到的默认库:
.libPaths("/Library/Frameworks/R.framework/Versions/3.4/Resources/library")
然后再次运行.libPaths()
以确保此文件路径是第一个打印的路径。然后我在我想要的任何软件包上执行install.packages("NameOfDesiredPackage")
,当我将它们导入我的控制台或终端时,它们导入没有问题。