2017-10-18 5 views
1

可能なすべての列のペアをループするペアワイズマネージ解析を実行しようとしています。私は、これが最良の例に連通していると思う:ベクトルに格納された列名を使用してcbindの列を呼び出す方法(Rの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

eval(as.symbol())を呼び出しているベクトルの各エントリをラップする必要があります。

So: m1 <- manova(cbind(eval(as.symbol(varList[1])), eval(as.symbol(varList[2]))) ~ Species, data = iris)が有効です。

関連する問題