如何使用存储在向量中的列名称调用cbind的列(尝试在R中执行与manova的列的成对比较)

时间:2017-10-18 20:11:50

标签: r dataframe cbind manova

我正在尝试执行成对的manova分析,我遍历所有可能的列对。我认为这最好用一个例子来表达:

varList <- colnames(iris)

m1 <- manova(cbind(varList[1], varList[2]) ~ Species, data = iris)
# Error in model.frame.default(formula = cbind(varList[1], varList[2]) ~  :
# variable lengths differ (found for 'Species')

m2 <- manova(cbind(noquote(varList[1]), noquote(varList[2])) ~ Species,
             data = iris)

# Error in model.frame.default(formula = cbind(noquote(varList[1]), noquote(varList[2])) ~  : 
# variable lengths differ (found for 'Species')

m3 <- manova(cbind(Sepal.Length, Petal.Length) ~ Species, data = iris)
m4 <- manova(cbind(iris[ ,1], iris[ ,3]) ~ Species, data = iris)

summary(m3)

#            Df Pillai approx F num Df den Df    Pr(>F)    
# Species     2 0.9885   71.829      4    294 < 2.2e-16 ***
# Residuals 147                                            
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R.version.string
# [1] "R version 3.4.2 (2017-09-28)"

RStudio.Version()$version
# [1] ‘1.1.383’

我认为这与在我的cbind()函数中引用向量中的colnames更相关。我从这个问题here中看到了关于使用括号的一些内容,但是不能让它适用于我的案例。我可以按编号调用列(请参阅m4),但如果可能的话,我更愿意使用列名。

1 个答案:

答案 0 :(得分:1)

您需要使用eval(as.symbol())来包装您正在调用的向量中的每个条目。

所以: m1 <- manova(cbind(eval(as.symbol(varList[1])), eval(as.symbol(varList[2]))) ~ Species, data = iris)应该有用。