将PowerShell变量传递给R脚本

3
目前,我在任务计划程序中通过执行PowerShell脚本运行一个R模型。该模型包含多个运行键,每个键都有自己的计划任务。在最初的设计中,模型有其自己特定于运行键的触发R脚本文件。例如,runkey1对应于trigger1.R,runkey2对应于trigger2.R。然而,这些触发文件除了特定定义了运行键变量之外,其余代码完全相同。例如,在trigger1.R中,我创建了以下内容:
RUNKEY <- runkey1

我想知道是否有可能直接通过PowerShell创建和绕过一个变量,以便我可以将这些触发器集成到一个文件中。
下面是我创建的PowerShell脚本,我称之为trigger1.ps1:
param([string]$RUNKEY='runkey1') 
Start-Process "path to exe" -ArgumentList "Path to trigger1.R"

在任务计划程序中,我在设置中有以下可选参数:
-ExecutionPolicy Bypass -File "path to trigger1.ps1 " -RUNKEY  'runkey1'

这个错误是在我运行R脚本时出现的,提示找不到runkey1。你有任何关于如何实现这个功能的想法吗?
1个回答

2
这是一个示例,展示了如何完成这个任务。首先,创建一个基本的trigger1.R文件,它将打印运行键:
args <- commandArgs(trailingOnly = TRUE)
runkey <- args[1]
print(runkey)
Sys.sleep(1) # so you can see it before window closes

然后执行 trigger1.ps1。注意 ArgumentList 是一个字符串数组,因此我使用了 @() 符号。
param([string]$RUNKEY = 'runkey1') 
Start-Process "Rscript.exe" -ArgumentList @("trigger1.R"; $RUNKEY)

然而,正如@mklement0在评论中指出的那样,这并不是严格必要的,你可以这样做:
Start-Process "Rscript.exe" -ArgumentList "trigger1.R", $RUNKEY

无论哪种情况,当您运行./trigger1.ps1时,它将打开一个新窗口,该窗口将运行trigger1.R,然后打印出以下内容:
[1] "runkey1"

不使用Start-Process

如果您不需要打开一个新的进程,并且希望在当前窗口中运行此命令,正如@mklement0在评论中指出的那样,您可以简单地执行以下操作:

param([string]$RUNKEY = 'runkey1') 
Rscript.exe "trigger1.R" $RUNKEY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接