简单的问题,但只有通过命令行参数传递的示例可以使用'file ='而不是任何公式。
例如data.txt
id var1 group
1 5 1
2 6 1
3 4 1
4 12 2
5 14 2
6 20 2
为什么无法在命令行中将组变量指定为anova:./ anova.R data.txt组
#!/usr/bin/env Rscript
args <- commandArgs(trailingOnly=TRUE)
data1 <- read.table(args[1],sep="\t", header =TRUE)
result <- summary(aov(richness ~ args[2], data=data1))
write("richness",file="alphatests.txt",append=TRUE)
capture.output(result, file="alphatests.txt",append=TRUE)
可变长度不同(为'args [2]'找到)调用:摘要... ->评估->评估->-> model.frame.default 执行停止
但这确实可行(当两个示例中都有一个列名“ group”时):
#!/usr/bin/env Rscript
args <- commandArgs(trailingOnly=TRUE)
data1 <- read.table(args[1],sep="\t", header =TRUE)
result <- summary(aov(richness ~ group, data=data1))
write("richness",file="alphatests.txt",append=TRUE)
capture.output(result, file="alphatests.txt",append=TRUE)
为什么我不能将命令行参数传递给公式?
答案 0 :(得分:2)
我们可以使用标准方法来更改公式
result <- summary(aov(reformulate(args[2], 'richness'), data = data1))
-完整代码
#!/usr/bin/env Rscript
args <- commandArgs(trailingOnly=TRUE)
data1 <- read.table(args[1], header =TRUE)
result <- summary(aov(reformulate(args[2], 'richness'), data = data1))
print(result)
-在终端中运行脚本
$ Rscript anova.R data.txt group
# Df Sum Sq Mean Sq F value Pr(>F)
#group 1 160.17 160.17 17.47 0.0139 *
#Residuals 4 36.67 9.17
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
注意:假设data1.txt中第二列名称为“丰富”
答案 1 :(得分:1)
命令行参数以字符串形式返回,因此当您将其传递给aov
函数时,它将不起作用。一种解决方法是使用get
result <- summary(aov(richness ~ get(args[2]), data=data1))