You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GNU R 3.6.3中solve()函数致CLI冻结问题求助

问题:Ubuntu 20.04下GNU R的solve()函数执行时冻结

我在使用Ubuntu 20.04默认apt仓库安装的R 3.6.3时,遇到了solve()函数的异常问题:

  • 调用solve()求矩阵逆时(比如测试的2x2矩阵),终端启动的R会话会直接冻结,htop显示单个CPU核心占用100%
  • RStudio图形界面内执行该代码正常,但RStudio内置终端执行同样冻结;RMarkdown中使用该函数也会导致会话冻结,无法生成文档
  • 测试代码如下:
    D = matrix( data = c(1, 2, 3, 4), nrow = 2, ncol = 2, byrow = TRUE )
    solve(D)
    
  • 补充细节:solve(A,B)中求解线性系统(B为向量)的功能正常,但当B为矩阵时仍会冻结;而使用QR分解的qr.solve(A)可以正常工作

已尝试的无效解决方案

  • 用R --vanilla启动R会话
  • 重启电脑
  • 切换使用外置显卡
  • 重装apt源的r-base-core包
  • 更换不同终端模拟器(如Konsole)

社区反馈与测试结果

AskUbuntu用户N0rbert在干净的20.04 LTS虚拟机中无法复现该问题,并提供了测试脚本。但我执行该脚本时,会话依然在solve(D)处冻结,相关输出如下:

kobyeongmin@odie:~/Temp$ ./r-test.sh
R version 3.6.3 (2020-02-29) -- "Holding the Windsock"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
...(省略版权信息)

D = matrix(

  • data = c(1, 2, 3, 4),
  • nrow = 2,
  • ncol = 2,
  • byrow = TRUE
  • )

solve(D)

我的R路径和版本信息:

kobyeongmin@odie:~$ which R
/usr/bin/R
kobyeongmin@odie:~$ R --version
R version 3.6.3 (2020-02-29) -- "Holding the Windsock"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
...(省略版权信息)

专家建议

从目前信息来看,这个问题大概率是系统特定的环境冲突导致的——干净环境无法复现,且常规修复手段无效。可以尝试以下步骤进一步排查和解决:

  1. 排查线性代数库冲突
    R的solve()依赖底层BLAS/LAPACK库,Ubuntu 20.04默认可能使用OpenBLAS或MKL。先检查当前R使用的线性代数库:

    sessionInfo()
    

    查看输出中的BLAS/LAPACK部分,如果是OpenBLAS,尝试切换到参考实现的BLAS:

    sudo update-alternatives --config libblas.so.3-x86_64-linux-gnu
    sudo update-alternatives --config liblapack.so.3-x86_64-linux-gnu
    

    选择libblas/liblapack.so.3-x86_64-linux-gnu(参考实现)后,重启R再测试solve()。

  2. 升级R版本
    你当前使用的R 3.6.3是2020年的旧版本,Ubuntu默认仓库版本通常滞后。建议添加CRAN官方源安装更新的R版本(如4.x系列):

    # 添加CRAN源
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
    sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/'
    sudo apt update
    sudo apt install r-base-core
    

    升级后再测试solve()函数是否恢复正常。

  3. 检查系统硬件/驱动问题
    虽然切换外置显卡无效,但可以尝试暂时禁用硬件加速设置,或检查CPU是否存在过热、超频等稳定性问题。也可以尝试在单核心模式下运行R,观察是否还会冻结:

    taskset -c 0 R
    

    启动后执行测试代码,查看状态变化。

  4. 编译R源码
    如果以上方法都无效,可尝试从源码编译R,完全控制依赖库的使用,避免系统预装库的冲突:

    # 安装编译依赖
    sudo apt build-dep r-base-core
    # 下载R 4.3.1源码(可替换为最新稳定版)
    wget https://cran.r-project.org/src/base/R-4/R-4.3.1.tar.gz
    tar -xzf R-4.3.1.tar.gz
    cd R-4.3.1
    # 配置编译选项(使用参考BLAS/LAPACK)
    ./configure --with-blas --with-lapack
    make
    sudo make install
    

    编译完成后使用新安装的R测试问题是否解决。


内容的提问来源于stack exchange,提问作者Ko Byeongmin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 16:27:48