R中quanteda包加载时崩溃的问题求助
先还原你的问题场景:在Mac Ventura 13.1系统、R 4.2.2版本下,加载quanteda包时R直接崩溃,报错信息如下:
Package version: 3.2.4 Unicode version: 14.0 ICU version: 70.1 *** caught segfault *** address 0x245, cause 'invalid permissions' Traceback: 1: RcppParallel::defaultNumThreads() 2: get_threads() 3: unname(min(get_threads(), na.rm = TRUE)) 4: get_options_default() 5: quanteda_initialize() 6: quanteda_options(initialize = TRUE) 7: fun(libname, pkgname) 8: doTryCatch(return(expr), name, parentenv, handler) 9: tryCatchOne(expr, names, parentenv, handlers[[1L]]) 10: tryCatchList(expr, classes, parentenv, handlers) 11: tryCatch(fun(libname, pkgname), error = identity) 12: runHook(".onAttach", ns, dirname(nspath), nsname) 13: attachNamespace(ns, pos = pos, deps, exclude, include.only) 14: doTryCatch(return(expr), name, parentenv, handler) 15: tryCatchOne(expr, names, parentenv, handlers[[1L]]) 16: tryCatchList(expr, classes, parentenv, handlers) 17: tryCatch({ attr(package, "LibPath") <- which.lib.loc ns <- loadNamespace(package, lib.loc) env <- attachNamespace(ns, pos = pos, deps, exclude, include.only)}, 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: %s", sQuote(package), P, conditionMessage(e)) if (logical.return && !quietly) message(paste("Error:", msg), domain = NA) else stop(msg, call. = FALSE, domain = NA)}) 18: library(quanteda)
从报错调用栈来看,崩溃发生在RcppParallel::defaultNumThreads(),说明问题大概率出在多线程权限或依赖包兼容性上,给你几个针对性的解决思路:
可行的解决步骤
优先修复RcppParallel依赖:既然崩溃点在这个包的函数上,先尝试重新安装RcppParallel,覆盖可能损坏的文件:
install.packages("RcppParallel", type = "binary")安装完成后再重新加载quanteda试试。
强制单线程加载:如果是多线程权限冲突导致的崩溃,可以在加载quanteda前先强制设置单线程,绕开线程数检测:
Sys.setenv(RCPP_PARALLEL_NUM_THREADS = 1) library(quanteda)这个方法很多时候能快速解决Mac系统下的这类segfault问题。
更新quanteda到最新版本:你当前用的是3.2.4版本,后续版本可能已经修复了Mac Ventura下的兼容性bug,尝试安装最新版:
install.packages("quanteda", dependencies = TRUE)如果CRAN版还是有问题,也可以试试GitHub上的开发版:
remotes::install_github("quanteda/quanteda")检查并更新ICU库:报错里显示ICU版本是70.1,Mac Ventura自带的ICU库可能和R 4.2.2不兼容。可以通过Homebrew更新ICU,然后重新编译相关R包:
先打开终端执行:brew install icu4c然后在R中重新安装依赖ICU的包,比如stringi和quanteda:
install.packages(c("stringi", "quanteda"), type = "source")尝试升级R版本:R 4.2.2发布于2022年10月,可能对Mac Ventura(2022年12月发布)的兼容性不够完善。尝试升级到最新的R稳定版(比如4.3.x),新版本通常会修复更多系统适配问题。
内容的提问来源于stack exchange,提问作者tobias sch

