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])
转换为数字类型。
【讨论】:
谢谢。我发现它以字符串形式返回。如何将其转换为数值。我只是想找到答案。 @samarprint(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 中的命令行参数的主要内容,如果未能解决你的问题,请参考以下文章