【发布时间】:2017-03-15 06:03:13
【问题描述】:
尽我所能(因为我没有太多运气找到它的文档)当使用包含通配符 * 的命令参数运行 Rscript 时,该参数被扩展为匹配的文件路径,或者如果没有匹配则通过。有没有办法一直传递通配符,所以我可以在脚本中自己处理它(例如使用Sys.glob 之类的东西)?
这是一个最小的例子,从终端运行:
ls
## foo.csv bar.csv baz.txt
Rscript -e "print(commandArgs(T))" *.csv
## [1] "foo.csv" "bar.csv"
Rscript -e "print(commandArgs(T))" *.txt
## [1] "baz.txt"
Rscript -e "print(commandArgs(T))" *.rds
## [1] "*.rds"
编辑:我了解到这种行为来自 bash,而不是 Rscript。是否有某种方法可以在 R 中解决这种行为,或者抑制特定 R 脚本而不是 Rscript 命令的通配符扩展?在我的特殊情况下,我想运行一个带有两个参数 Rscript collapse.R *.rds out.rds 的函数,它将许多单个 RDS 文件的内容连接到一个列表中,并将结果保存在 out.rds 中。但由于通配符在传递给 R 之前已扩展,因此我无法检查是否提供了第二个参数。
【问题讨论】:
-
我假设您使用的是 *nix,因为 Windows cmd 不进行扩展。见stackoverflow.com/questions/11456403/…
-
贴一些例子...请。
-
@42- 谢谢!添加了一个示例。
-
@HongOoi 有用的链接。有没有办法解决 R 中的这种行为 - 以某种方式将这些参数折叠回单个字符串?一般来说,我不想关闭 Rscript 命令的 globbing,只是这个程序 - 我不确定我是否有适当的权限来处理我正在处理的计算机上的配置文件。跨度>
标签: r shell command-line-arguments glob