我有一个命令在Mac(OSX El Cap)上键入终端时有效,但是当使用system()
从R调用时,相同的命令失败。
我正在尝试使用MODIS Reprojection Tool批量处理MODIS卫星文件。我的软件都是最新的。
这是一个简单的例子,我将两个文件拼接在一起。这两个文件的名称位于名为input.list
的文本输入文件中。该命令只告诉mrtmosaic
例程在哪里找到输入列表以及输出的位置。
此命令在终端中正常工作:
/Applications/Modis_Reprojection_Tool/bin/mrtmosaic -i ~/temp/input.list -o ~/temp/output.hdf
但是,如果我将完全相同的字符串放入变量并从R(使用RStudio)运行它,它就会失败:
comstring<-"/Applications/Modis_Reprojection_Tool/bin/mrtmosaic -i ~/temp/input.list -o ~/temp/output.hdf"
system(comstring)
警告:gctp_call:未找到环境变量:
MRT_DATA_DIR或MRTDATADIR未定义 错误:GetInputGeoCornerMosaic:常规处理将纬度/经度坐标转换为输入投影坐标时出错 致命错误,终止......
奇怪的是系统知道环境变量是什么。在终端中,命令
echo $MRT_DATA_DIR
显示正确的目录: / Applications / Modis_Reprojection_Tool / data
我不知道为什么在终端没有问题的情况下从R system()
电话中找到变量时会遇到问题。我很难过!
答案 0 :(得分:2)
我将此问题发布到R帮助列表中,有两个人帮我解决了这个问题。他们建议(如果我理解的话)问题是OSX El Capitan没有成功地将环境变量传递给R.无论如何:
这些不有效:
.bash_profile
中设置环境变量(例如,通过添加和导出MTR_DATA_DIR="/Applications/MRT/data"
);或.Rprofile
文件来设置环境变量。这些做工作:
Sys.setenv(MRT_DATA_DIR="/Applications/MRT/data")
在R命令行设置环境变量;或.Renviron
文件(位于我的主目录中)中设置环境变量,方法是向其添加MRT_DATA_DIR="/Applications/MRT/data"
;或MRT_DATA_DIR="/Applications/MRT/data" open -a Rstudio
。最后一种方法是一种有效的解决方法,也是一个有用的工具,但是有点笨拙,因为每次都必须记住以这种方式打开RStudio。