bash 到 Rscript 中的命令行参数

Posted

技术标签:

【中文标题】bash 到 Rscript 中的命令行参数【英文标题】:command line arguments in bash to Rscript 【发布时间】:2011-05-31 16:08:52 【问题描述】:

我有一个 bash 脚本,它创建一个 csv 文件和一个 R 文件,它从中创建图形。

在 bash 脚本结束时,我调用 Rscript Graphs.R 10

我得到的回复如下:

Error in is.vector(X) : subscript out of bounds
Calls: print ... <Anonymous> -> lapply -> FUN -> lapply -> is.vector
Execution halted

我的 Graphs.R 的前几行是:

#!/bin/Rscript
args <- commandArgs(TRUE)
CorrAns = args[1]

不知道我做错了什么?网上的建议对我来说似乎是说这应该有效。很难理解commandArgs

【问题讨论】:

【参考方案1】:

Rscript args.R 10 其中 10 是我们要传递给 R 脚本的数值。

print(as.numeric(commandArgs(TRUE)[1]) 打印出可以分配给变量的值。

【讨论】:

这与我更新后的答案相同,您接受为“最佳”的答案并不能回答您的问题。 Joshua,据我所知,我根据自己的需要调整了 marcog 的答案,然后将其作为“最佳”答案输入。我不记得当时您的最新答案是可见的。不过,我非常感谢您的帮助。【参考方案2】:

在 args.R 中有以下内容

print(commandArgs(TRUE)[1])

以及 args.sh 中的以下内容

Rscript args.R 10

我从bash args.sh得到以下输出

[1] "10"

并且没有错误。如有必要,使用as.numeric(commandArgs(TRUE)[1]) 转换为数字类型。

【讨论】:

谢谢。我发现它以字符串形式返回。如何将其转换为数值。我只是想找到答案。 @samar print(as.numeric(commandArgs(TRUE)[1])) 打印 [1] 10 刚刚找到答案。 x @samar 太棒了!如果其他人来这里有同样的问题,你能把它作为答案发布吗? 对不起,我没有看到你更简单的答案。我试图看看如何将其发布为答案。对此有任何建议。【参考方案3】:

只是猜测,也许您需要将 CorrAns 从字符转换为数字,因为 ?CommandArgs 的值部分说:

包含名称的字符向量 的可执行文件和 用户提供的命令行参数。

更新:它可能很简单:

#!/bin/Rscript
args <- commandArgs(TRUE)
(CorrAns = args[1])
(CorrAns = as.numeric(args[1]))

【讨论】:

谢谢。不太确定如何实现。我不认为 R 中的变量名与字符或数字相关联。但是将再次检查 R Intro 书。 @samar 我建议尝试as.numeric(args[1]),就像我在更新的答案中所做的那样。 非常感谢。这对我来说是一个新网站,就像 R 对我来说是一种新体验一样。两者都提供了极大的满足感。【参考方案4】:

阅读docs,您似乎需要从对commandArgs() 的调用中删除TRUE,因为您没有使用--args 调用脚本。要么,要么你需要打电话给Rscript Graphs.R --args 10

用法

commandArgs(trailingOnly = FALSE)

参数

trailingOnly 合乎逻辑。应该只 --args 之后的参数是否被返回?

【讨论】:

谢谢。我这样做了,但错误消息与我最初报告的相同 @samar 查看我的新答案,看看是否有帮助?

以上是关于bash 到 Rscript 中的命令行参数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Bash 中的文件调用多个命令行参数?

在 linux/bash 中添加到命令行参数

Bash 中的命令行参数 [重复]

将命令行参数转换为 Bash 中的数组

如何转义任意字符串以用作 Bash 中的命令行参数?

解析/传递命令行参数到bash脚本 - “$ @”和“$ *”之间有什么区别?