【问题标题】:Cannot run program using system() in R无法在 R 中使用 system() 运行程序
【发布时间】:2021-06-20 09:15:14
【问题描述】:

我正在尝试使用 system() 在 R 脚本中从包 deepTools 运行 computeMatrix。

以下命令会收到此错误消息。

system('computeMatrix --help')

sh:computeMatrix:找不到命令
警告信息:
在系统中(“computeMatrix --help”):运行命令出错

但是,如果我在终端中运行相同的命令,一切正常。


sessionInfo()

R 版本 4.0.4 (2021-02-15)
平台:x86_64-apple-darwin17.0(64位)
运行于:macOS Big Sur 10.16
矩阵产品:默认
LAPACK:/Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

【问题讨论】:

  • 在终端中运行命令时,它在交互式外壳中运行。这与直接运行命令非常不同——主要是因为它为 shell 加载配置文件,这些文件通常负责设置环境变量,例如 PATH,这会改变 shell 查找可执行文件的方式。
  • 有没有简单的方法告诉 R 在哪里寻找程序或在 R 中以与终端相同的方式对其进行初始化?
  • 打开终端窗口,输入which computeMatrix,将可执行文件的完整路径复制到system 命令中。
  • @samu 您可以在子shell 中执行命令。但通常你不想这样做;相反,您希望在启动 R 时正确设置 PATH。那么:R 是如何推出的?
  • @user12728748 这是一个非常糟糕的主意。永远不要硬编码绝对路径(/usr/bin/env 和 /bin/sh 是极少数例外中的两个)。这样做只会导致维护代码并使其在其他系统(或将来的同一系统)上运行时出现问题。

标签: r macos command-line


【解决方案1】:

这是在 Ubuntu 20.04 中运行的。
运行系统命令的推荐方式是使用system2,而不是system。参数在向量args 中传递。在这种情况下,args 是一个长度为 1 的向量,但如果有多个参数,则将它们传递为

args <- c("arg1", "arg2", etc)

此命令按预期工作。

cmd <- "computeMatrix"
args <- "--version"
system2(cmd, args)
#computeMatrix 3.3.2

sessionInfo()
#R version 4.0.4 (2021-02-15)
#Platform: x86_64-pc-linux-gnu (64-bit)
#Running under: Ubuntu 20.04.2 LTS
#
#Matrix products: default
#BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
#LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
#
#locale:
# [1] LC_CTYPE=pt_PT.UTF-8       LC_NUMERIC=C              
# [3] LC_TIME=pt_PT.UTF-8        LC_COLLATE=pt_PT.UTF-8    
# [5] LC_MONETARY=pt_PT.UTF-8    LC_MESSAGES=pt_PT.UTF-8   
# [7] LC_PAPER=pt_PT.UTF-8       LC_NAME=C                 
# [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#[11] LC_MEASUREMENT=pt_PT.UTF-8 LC_IDENTIFICATION=C       

#attached base packages:
#[1] stats     graphics  grDevices utils     datasets  methods   base     
#
#loaded via a namespace (and not attached):
#[1] compiler_4.0.4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2023-03-26
    • 2012-04-03
    • 2013-03-05
    • 2020-03-07
    相关资源
    最近更新 更多