将用户 arg 传递给 DESeq2 函数

Sum*_*Ela 3 arguments r optparse string-parsing bioconductor

DESeq我正在尝试使用从命令行输入的参数在 RScript 中运行。我曾经optparse解析用户参数并尝试将设计参数传递到函数中DESeqDataSetFromMatrix()

我直接测试了这个功能,效果很好:

DESeq_tbl <- DESeqDataSetFromMatrix(countData=counts_tbl,
colData=coldata, design=~taxonomy)
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试传递变量opt$design(这是一个字符串=“~taxonomy”),我会收到以下错误:

DESeq_tbl <- DESeqDataSetFromMatrix(countData=counts_tbl,
colData=coldata, design=opt$design)
Run Code Online (Sandbox Code Playgroud)

错误:$ 运算符对于原子向量无效执行停止

我尝试过/noquote()的各种组合并将整个命令创建为字符串以传递给函数,但没有任何效果。任何建议将不胜感激。catpasteDESeqDataSetFromMatrix()

解决方案

感谢 Ben Bolker 下面的回答,以下方法有效:

DESeq_tbl <- DESeqDataSetFromMatrix(countData=counts_tbl,
colData=coldata, design=as.formula(opt$design))
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 5

我想你需要as.formula(opt$design)

x <- "~taxonomy"
f <- ~taxonomy
str(f)
## Class 'formula'  language ~taxonomy
## ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
identical(f,as.formula(x)) ## TRUE
Run Code Online (Sandbox Code Playgroud)