目前我有一个R脚本,它将8个参数硬编码为我脚本的前8行。
我已经制作了一个批处理文件,试图动态地手动更改参数,但它似乎没有按照我想要的方式工作。
当前运行脚本的批处理(但实际上并未更改参数)
echo off
ECHO PRESS ENTER AT ANY INPUT TO ACCEPT the DEFAULT VALUE.
:: Setting of Variables
@Set /P RScript=Set path to R:_
@Set /P RProgram=Set path to RScript:_
@Set /P RStartDir=Set Start Directory:_
@Set /P Begin=Begin on which Loan?:_
@Set /P End=End on which Loan?:_
@Set /P OutputDir=Set Output Directory:_
@Set /P Deal=Set Deal input file (.txt):_
@Set /P OutputFile=Name Deal Output File:_
@Set /P AsOfDate=As of Date?:_
@Set /P ThirtyYrSpread=Thirty Year Mortgage Spread?:_
:: If Blank (enter), set variables/paths to Defaults (Listed Below)
if "%RScript%"=="" Set RScript=c:\program files\r\r-
3.4.3\bin\x64\rscript.exe
if "%RProgram%"=="" Set RProgram=C:\MortgageMatt\Cirt2014-
1\0.Mortgage Model.R
if "%RStartDir%"=="" Set RStartDir=C:\MortgageMatt\Cirt2014-1
if "%Begin%"=="" Set Begin=1
if "%End%"=="" Set End=2
if "%OutputDir%"=="" Set OutputDir=C:\MortgageMatt\Cirt2014-1
if "%Deal%"=="" Set Deal=Cirt 2014-1 Loan Level.txt
if "%OutputFile%"=="" Set OutputFile=Cirt 2014-1d
if "%AsOfDate%"=="" Set AsOfDate=62017
if "%ThirtyYrSpread%" == "" Set ThirtyYrSpread=135
echo "%RScript% %RProgram% %RStartDir% %Begin% %End% %OutputDir% %Deal%
%OutputFile% %AsOfDate% %ThirtyYrSpread%"
ECHO PLEASE CHECK IF THESE VALUES ARE CORRECT
pause
:: Command Prompt, /c Carries out command specified by string and then
terminates
cmd /c ""%RScript%" "%RProgram%" "%RStartDir%" "%Begin%" "%End%"
"%OutputDir%" "%Deal%" "%OutputFile%" "%AsOfDate%" "%ThirtyYrSpread%""
因为参数实际上是硬编码到R脚本中的,所以这是我为了适应而添加的内容。这看起来不错吗?我认为这是我遇到错误的地方。
添加到R脚本
args <- commandArgs(trailingOnly = TRUE)
if (length(args) == 0) {
if (!exists("dataDir")) { stop("variables dataDir not found") }
# Set dataDir variable when Running inside a R Session
args <- c(getwd(), 1, 2, ".", "Cirt 2014-1 Loan Level.txt", "Cirt 2014-
1", "62017", 175)
}
print(args)
# Input Values
Input.Directory <- paste(args[1]) ## getwd() , "/", "inputs", sep = "")
Begin.Sim <- args[2]
End.Sim <- args[3]
Output.Directory <- paste(args[1],"\\",args[4],sep = "") ##, "/", "outputs",
sep = "")
Pool.ID.File <- args[5] #"Cirt 2014-1 Loan Level.txt"
Pool.ID <- args[6] #"Cirt 2014-1"
asofdate <- args[7] #"62017"
Thirty.Yr.Mort.Spread <- args[8] # 175
当我尝试使用.bat在cmd中运行它时,我收到一条错误消息,指出无法更改工作目录。有人有什么建议吗?
我很清楚错误在哪里,但我正努力解决它。 包含其中所有内容的文件路径为
C:\MortgageMatt\Cirt2014-1
编辑:
我也听说过一种名为R CMD Batch的东西......我应该调查一下吗?我发现它是一种较老的技术。
我的代码在Args / IF之前的样子
# Input Values
Input.Directory <- "C:/Mortgage/Cirt 2014 - 1"
Output.Directory <- "C:/Mortgage/Cirt 2014 - 1"
Pool.ID.File <- "Cirt 2014-1 Loan Level.txt"
Pool.ID <- "Cirt 2014-1 NEW"
start<- 1
sims <- 2 # Number of Simulations
asofdate <- "62017"
Thirty.Yr.Mort.Spread <- 175
答案 0 :(得分:3)
您可以使用其中一个软件包解析命令行选项来完成R中的所有操作:
或手动完成 - 不推荐。
您也不希望较旧的R CMD BATCH
- 使用Rscript(或更小的,但更小的在Windows上不起作用)。
#!/usr/bin/Rscript
suppressMessages(library(docopt))
doc <- "Usage: foo.R [-h] [-x] [--src REPODIR] [--out OUTDIR] [FILES...]
-s --src REPODIR source root directory [default: ~/git]
-o --out OUTDIR output directory [default: /tmp]
-h --help show this help text"
opt <- docopt(doc) # docopt parsing
print(opt)
你收到一条好消息,自动,没有格式化需求:
edd@rob:/tmp$ Rscript so50256138.R -h
Usage: foo.R [-h] [-x] [--src REPODIR] [--out OUTDIR] [FILES...]
-s --src REPODIR source root directory [default: ~/git]
-o --out OUTDIR output directory [default: /tmp]
-h --help show this help text
edd@rob:/tmp$
注意如何使用一个默认参数,另一个来自命令行:
edd@rob:/tmp$ Rscript so50256138.R -s A
List of 9
$ --src : chr "A"
$ --out : chr "/tmp"
$ --help: logi FALSE
$ -x : logi FALSE
$ FILES : list()
$ src : chr "A"
$ out : chr "/tmp"
$ help : logi FALSE
$ x : logi FALSE
NULL
您可以通过名称或选项标记opt
访问它们。
docopt网站有更多;这实际上是一个可移植的规范,CRAN包为R实现它。