【问题标题】:R - Arguments in command line errorR - 命令行错误中的参数
【发布时间】:2016-05-30 22:09:09
【问题描述】:

假设我有一个如下所示的数据框:

SNP   Frequency
A     20
B     50
C     7

(当然,真正的数据框有更多行。)

我想做的是将一些参数传递给命令行,这将允许我在命令行中设置输入数据帧和频率。这是我尝试过的:

args = commandArgs()
df <-args[1]
freqsub <- subset(df, args[2],header=TRUE)

args[2] 部分我通常会有Frequency &gt; somenumber

当我有df &lt;- args[1] 时,我知道如何使用它,但args[2] 没有。

$ Rscript sumtest.R test.txt Frequency>20

"Error in subset.default(df, args[2], header = TRUE) : 
  argument "subset" is missing, with no default
Calls: subset -> subset.default
Execution halted"

有什么想法吗?如果需要更多信息,很高兴编辑(我不知道是否是这种情况,抱歉)。

【问题讨论】:

    标签: r command-line arguments


    【解决方案1】:

    我认为你必须使用选项trailingOnly = TRUE

    args = commandArgs (trailingOnly = TRUE)
    

    否则 args[1] args[2] 不是你所期望的......

    使用trailingOnly = FALSE,您在args 的首位获得的是有关R 进程如何运行的信息。

    你可以这样做:

    print (args)
    

    在你的 shell 中查看你在 args 向量中真正拥有的东西。

    除了 "Frequency>20" 将作为一个字符出现在 args[2] 中...因此,如果您想将其作为 subset 函数的参数,则必须对其进行处理。

    在这种情况下,我将只传递数字作为要在 args[2] 中读取的参数。然后你可以这样做:

    subset(df, Frequency > as.numeric (args[2]), header=TRUE)
    

    所以按照你的 cmets 我会做 2 个 R 脚本:

    第一个只是为了确保您读取正确的参数:

    args = commandArgs (trailingOnly = TRUE)
    myfile = args[1]
    myfreq = as.numeric (args[2])
    print (myfile)
    print (myfreq)    
    

    这你必须在你的shell中运行它:

    Rscript script1.R file.txt 5
    

    你应该得到如下输出:

    file.txt
    5
    

    在你的第二个脚本中:

    myfile = "file.txt"
    myfreq = 5
    
    ## and all computations you need
    df = read.table (myfile, ...
    subset(df, myfreq, ...)
    

    调试第二个文件(以交互方式)直到它工作,然后更改前两行:通过第一个文件中的 (3) commandArgs 行。

    【讨论】:

    • 感谢您的建议。我尝试了您的建议并遇到了这个问题:有 50 个或更多警告(使用警告()查看前 50 个)警告消息:在 eval(expr,envir,enclos)中:强制引入的 NA 另外,请问在哪里你把打印(参数)检查?当你说 shell 时,我认为是这一行:$ Rscript sumtest.R test.txt 20
    • 我认为您应该首先尝试在 R 交互式会话中调试代码中的分析部分,然后使用 commandArgs 将您的脚本转换为可执行文件。问题似乎与您正在处理的数据或您的处理方式有关。
    • print (args)你可以把它放在任何适合你或更方便你品脱的地方。这只是为了确保您正在阅读...
    • 感谢您的进一步建议。我将尝试其中一些事情并报告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2015-04-12
    • 2014-03-22
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多