如何将R变量从一个shell脚本重用到另一个shell脚本?

如何将R变量从一个shell脚本重用到另一个shell脚本?,r,shell,scripting,global-variables,R,Shell,Scripting,Global Variables,我有一个R管道在一个大数据集上运行分析。目前,我可以通过从终端调用脚本来启动分析,并为其提供分析参数。 $。/my_script.R--参数1 a1--参数2 b1 脚本从.Rds文件加载数据集,但每次启动脚本都需要一分钟以上的时间来加载 是否有一种方法可以将数据集保存在内存中,以便在一行中运行多个分析(意思是$./my_script.R--parameter1 a2--parameter2 b2等)?也许可以利用全球环境? 谢谢 解决该问题的一种方法是允许用户在脚本调用时指定多对参数,以便程序

我有一个R管道在一个大数据集上运行分析。目前,我可以通过从终端调用脚本来启动分析,并为其提供分析参数。
$。/my_script.R--参数1 a1--参数2 b1

脚本从
.Rds
文件加载数据集,但每次启动脚本都需要一分钟以上的时间来加载

是否有一种方法可以将数据集保存在内存中,以便在一行中运行多个分析(意思是
$./my_script.R--parameter1 a2--parameter2 b2
等)?也许可以利用全球环境?

谢谢

解决该问题的一种方法是允许用户在脚本调用时指定多对参数,以便程序可以一次迭代所有参数(只需要一次启动成本)

下面是一个示例脚本,它使用了一些东西:

  • 库(optpass)
    ,以便于参数设置。还有其他的,什么都不需要,我发现这让事情看起来很容易
  • 脚本能够知道它是源代码(而不是运行一些代码,对开发/测试很有用)还是从命令行运行(这将触发一些代码运行)。这类似于python的
    if uuuu name uuuuu=='uuu main uuuu':
    技巧,我刚才回答为
  • 它们都不是严格必需的,但我发现它有助于演示如何构造脚本,以便您可以方便地执行“一个或多个”类型操作

    #/usr/bin/env r
    
    启动您的意思是,在bash提示符下,您调用
    /my_script.R..
    ,当它完成时,您将返回bash提示符并希望运行相同的(或不同的)脚本R脚本并使该数据保持驻留状态以便第二个R实例重用?@r2evans是的,就是这样。问题在于:当
    myscript.R
    完成时,R退出。它为计算而请求和分配的内存(以及保存
    .Rds
    文件内容的内存)已被释放并返回到操作系统。如果希望/需要R对象驻留在内存中,则必须以某种方式保持R处于活动状态,这可能与使用多个(不同)脚本文件的这种方法不兼容。使用驻留内存保持某种形式的R的一种方法是提供某种形式的R服务,这种服务可能会有光泽(不太适合此场景),
    管道工
    ,或
    Rserve
    。每种方法都有优点和缺点,它们都有缺点(例如,学习曲线、运行过程的开销、配置、身份验证、状态管理等)。改进整个过程的一种方法是:不提供
    --param1 a1--param2 b1
    ,而是允许在单个调用中进行多次迭代。例如,您可能支持类似于args的
    --param1
    (当前功能不变),但也可以添加一个选项
    --params csv somefile.csv
    ,其中csv文件是一个2列csv,包含1对或多对
    a1、b1
    ,每行执行一次。您的脚本需要调整以适应此迭代,但在加载一次后,您可以将大型ish
    .Rds
    保持在常驻状态。