【问题标题】:How can I pass an array as argument to an R script command line run?如何将数组作为参数传递给 R 脚本命令行运行?
【发布时间】:2017-11-30 22:35:06
【问题描述】:

我正在尝试通过 Windows 中的命令行将包含数百个元素的数组作为 R 脚本的参数传递。首先,我想以某种方式声明我的数组。我在命令行中这样做:

set my_array=c(0,1,2,3,4,5,6,7,8,9,...,700)

然后我想运行我的脚本并将数组作为参数。

Rscript my_script my_array

但是当我尝试这个时,出现一条错误消息,提示找不到“对象 my_array”。我知道如何使用 args <- commandArgs(TRUE) 在我的脚本中获取参数。我只需要将我声明的数组识别为一个参数 - 或以正确的方式声明它并以正确的方式将其作为参数传递给我的脚本。

谢谢!

【问题讨论】:

    标签: arrays r command-line arguments


    【解决方案1】:

    首先,我不确定您是否应该使用set 在终端中声明任何变量,但您可以在man set 页面上看到更多内容。

    我认为您可以通过一些方法尝试将数组传递给 R 脚本,这主要取决于您如何在终端中声明 my_array。


    1 - "my_array" 可以是 bash 中的字符串:

    $ my_array="c(0,1,2,3,4)"
    $ Rscript my_script ${my_array}
    

    并使用 R 脚本中的 eval(parse(text=())) 将参数作为向量转换为 R 环境。

    args <- commandArgs(trailingOnly=TRUE) 
    print(args)
    # c(0,1,2,3,4,5,6,7,8,9)
    
    args <- eval(parse(text=args[1]))
    print(args)
    # [1] 0 1 2 3 4 5 6 7 8 9
    

    2 - "my_array" 可以是 bash 中的数组:

    $ my_array=(0,1,2,3,4)
    $ Rscript my_script ${my_array[*]}
    

    在 R 中,args 已经是您的数组,但属于字符类型:

    args <- commandArgs(trailingOnly=TRUE) 
    print(args)
    # [1] "0" "1" "2" "3" "4" "5"
    

    【讨论】:

      【解决方案2】:

      我想我明白你在这里想要做什么,如果我错了,请告诉我。

      我创建了一个 R 脚本(称为 script.R),其中包含以下内容:

      args <- commandArgs(TRUE)
      eval(parse(text=args[1]))
      print(myarray)
      

      然后我可以像这样调用脚本(从我的命令行)

      Rscript script.R myarray="c(1,3,4)"
      

      如您所见,参数被传递(在您的脚本中,您可以执行 print(args) 来查看传递了什么以及如何传递),我使用 eval(parse(text=...))) 使其执行(在脚本中创建 myarray)然后我可以用它做我想做的事(在我的例子中,我打印了它,但你可以做分析或其他事情)。这有帮助吗?

      【讨论】:

      • 谢谢,乔伊!但我的问题是我必须传递数百个元素的许多数组。因此,如果我在同一命令行中声明数组,就像在 Rscript script.R myarray="c(1,3,4)" 中一样,我无法声明我需要的所有内容。
      【解决方案3】:

      如果数组中有数百个值,也许将其写入文本文件并将文件路径作为参数传递并让 R 读取它会更有用。

      【讨论】:

        猜你喜欢
        • 2017-12-09
        • 2013-10-11
        • 1970-01-01
        • 2013-08-03
        • 2014-03-08
        • 2013-10-22
        • 2016-12-19
        • 1970-01-01
        • 2014-10-25
        相关资源
        最近更新 更多