从Stata打电话给R

时间:2015-04-14 15:36:47

标签: r shell stata

出于某些非常恼人的原因,我无法直接在数据中心调用我的R脚本。我只能拨打stata,然后stata必须拨打我的R脚本。

目前,我正在尝试使用shell命令:

capture cd C:\\Correct\Dir 
shell “C:\\Program Files\R-3.1.2\bin\Rscript.exe" "myFile.R"

路径是正确的,但我在Stata中运行时只得到蓝屏,没有其他事情发生。蓝屏中有一条消息,但它立即消失,所以我不知道它说的是什么。

如何进行调试呢?这样做有更好的方法吗?我不想使用rsource之类的其他软件包,因为它们需要在安装到数据中心之前进行认证,这是一个漫长的过程。

2 个答案:

答案 0 :(得分:2)

我认为双反斜杠的存在导致了这个问题。以下适用于我:

STATA

cd "path\of\choice"
shell "C:\Program Files\R\R-3.1.2\bin\Rscript.exe" "test.R"

test.r

setwd("path\\of\\choice")
data(mtcars)
mtcars
write.csv(mtcars, "cars.csv")

答案 1 :(得分:2)

以下是Stata呼叫R的一个例子(不可再现)

*----- CALL R -----

// location of input/output files for R
local dirq "`pdir'/proc_data/q_irepriv.csv" // input 1 -> arg1
local dirh "`pdir'/proc_data/h_nophincome.csv" // input 2 -> arg2
local dirRdta "`pdir'/proc_data/`dofile'.Rdta" // output -> arg3
local dirout "`pdir'/" // project_dir -> arg4
local dirout "`dofile'/" // do_file_stub -> arg5

// call -rsource- passing the locations as arguments
rsource using "`pdir'/r_files/`dofile'.R", ///
    roptions(`" --vanilla --args "`dirq'" "`dirh'" "`dirRdta'" "`pdir'" "`dofile'" "')

*----- END OF R -----

我使用rsource,这是一个用户编写的命令,可以使用ssc install rsource下载。

另一方面,Stata倾向于在这些情况下使用正斜杠。请参阅Nick Cox撰写的Stata tip 65: Beware the backstabbing backslash

修改

您报告的蓝屏消失,没有其他任何事情发生。这可能是R在R脚本中出现一些错误的结果。举个例子:

.r脚本包含:

# output OK
head(mtcars)

# provoke error
2+*2

并且您的Stata文件包含:

shell "C:/Program Files/R/R-3.0.3/bin/x64/Rscript.exe" --no-save --no-restore --verbose "D:/Datos/rferrer/Desktop/rcars.r" 

上述内容将重现您的报告。

要进行调试,您可以使用OS shell命令重定向输出和错误消息。而不是后者,尝试:

shell "C:/Program Files/R/R-3.0.3/bin/x64/Rscript.exe" --no-save --no-restore --verbose "D:/Datos/rferrer/Desktop/rcars.r" > Routput.txt 2> Rerror.txt

这会生成两个文件:

Routput.txt 包含

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Rerror.txt 包含

running
  'C:\Program Files\R\R-3.0.3\bin\x64\Rterm.exe --slave --no-restore --no-save --no-restore --file=D:/Datos/rferrer/Desktop/rcars.r'

Error: inesperado '*' in "2+*"
Ejecución interrumpida

(错误是西班牙语,但当然,这是无关紧要的。)

这是在Windows 7企业版上。