为什么当我尝试导入某些包时 R 会崩溃?
Why is R crashing when I try to import certain packages?
每次我尝试在 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 上 运行ning 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 一直崩溃的原因吗?
在发现我已经安装了下载到两个不同库的包后(请参阅上面有问题的更新部分),我决定删除我已安装的所有包。使用此源 (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")
,当我将它们导入我的控制台或终端时,它们导入没有问题。
每次我尝试在 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 上 运行ning 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 一直崩溃的原因吗?
在发现我已经安装了下载到两个不同库的包后(请参阅上面有问题的更新部分),我决定删除我已安装的所有包。使用此源 (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")
,当我将它们导入我的控制台或终端时,它们导入没有问题。