Bash R 的包装器
Bash wrapper for R
我想通过给它一些来自 Bash 的参数来调用一些 R 函数,并存储这个函数 returns 的值。像
#!/usr/bin/Rscript
myfunction(arg1, arg2){
...
...
return(ValueToReturn)
}
并从 Bash
调用它
$ returnedvalue = on ./myscript.r call myfunction -arg1 -arg2
到目前为止,我能想到的唯一解决方案是将参数写入文件,然后调用 R 脚本 ('./myscrpt.r'),其中 'myfunction()' 从文件,然后在我可以从 Bash.
读取的文件上写入 'ValueToReturn'
据我所知这是不可能的,因为 parent 和 child shell 是相关的:child shell 是不允许的改变他们 parent 的环境,这就是为什么放置:
system(paste0("export returnedvalue=", ValuetoReturn))
只会将该变量导出到当前环境以及环境产生的任何后续 child shells。
一个丑陋的方法可能是将输出保存到一个文件中:
system(paste0("echo 'export returnedvalue=", ValuetoReturn, "' > setvars.txt"))
然后在 parent shell 源文件中:
. ./setvars.txt
至少这样你可以保存多个输出。
我想通过给它一些来自 Bash 的参数来调用一些 R 函数,并存储这个函数 returns 的值。像
#!/usr/bin/Rscript
myfunction(arg1, arg2){
...
...
return(ValueToReturn)
}
并从 Bash
调用它$ returnedvalue = on ./myscript.r call myfunction -arg1 -arg2
到目前为止,我能想到的唯一解决方案是将参数写入文件,然后调用 R 脚本 ('./myscrpt.r'),其中 'myfunction()' 从文件,然后在我可以从 Bash.
读取的文件上写入 'ValueToReturn'据我所知这是不可能的,因为 parent 和 child shell 是相关的:child shell 是不允许的改变他们 parent 的环境,这就是为什么放置:
system(paste0("export returnedvalue=", ValuetoReturn))
只会将该变量导出到当前环境以及环境产生的任何后续 child shells。
一个丑陋的方法可能是将输出保存到一个文件中:
system(paste0("echo 'export returnedvalue=", ValuetoReturn, "' > setvars.txt"))
然后在 parent shell 源文件中:
. ./setvars.txt
至少这样你可以保存多个输出。