2017-09-19 19 views
0

私はRの初心者です 次のコードを使用してグループ間分散を計算しようとしています。この機能を使用している間Rのデータ計算での平均計算

calcBetweenGroupsVariance <- function(variable,groupvariable) 
{ 
# find out how many values the group variable can take 
groupvariable2 <- as.factor(groupvariable[[1]]) 
levels <- levels(groupvariable2) 
numlevels <- length(levels) 
# calculate the overall grand mean: 
grandmean <- mean(variable) 
# get the mean and standard deviation for each group: 
numtotal <- 0 
denomtotal <- 0 
for (i in 1:numlevels) 
{ 
    leveli <- levels[i] 
    levelidata <- variable[groupvariable==leveli,] 
    levelilength <- length(levelidata) 
    # get the mean and standard deviation for group i: 
    meani <- mean(levelidata) 
    sdi <- sd(levelidata) 
    numi <- levelilength * ((meani - grandmean)^2) 
    denomi <- levelilength 
    numtotal <- numtotal + numi 
    denomtotal <- denomtotal + denomi 
} 
# calculate the between-groups variance 
Vb <- numtotal/(numlevels - 1) 
Vb <- Vb[[1]] 
return(Vb) 
} 

しかし、私は、

calcBetweenGroupsVariance (data[3],data[2]) 

警告メッセージを次のエラーを取得しています:mean.default(変数)の場合:引数が 数値または論理的ではありません。戻っNA

平均機能を使用している間に何か問題があると私は理解しています。ここで

str(data)

'data.frame': 45 obs. of 11 variables: 
$ V1 : int 2 3 3 2 3 2 2 2 3 2 ... 
$ V2 : num 1.3243 -2.4546 0.1352 0.0676 -1.1901 ... 
$ V3 : num 0.913 -2.644 0.663 1.217 -0.409 ... 
$ V4 : num -1.863 1.965 -0.698 -0.945 0.617 ... 
$ V5 : num -0.574 1.031 -0.308 -0.574 0.354 ... 
$ V6 : num -0.8963 2.5702 0.0736 -1.3671 0.9045 ... 
$ V7 : num 0.2276 0.0624 0.5945 0.6194 0.5473 ... 
$ V8 : num 1.304 -1.624 0.408 0.368 -0.559 ... 
$ V9 : num -0.1827 -0.9748 -0.5158 -0.0191 -0.3053 ... 
$ V10: num -0.964 0.67 -0.12 0.789 0.711 ... 
$ V11: num -0.833 -0.833 -0.833 -0.0539 -0.0539 ... 

の出力は親切にこのエラーを取り除く方法を提案しています。

おかげとのは、あなたの関数の引数variable, groupvariableがベクトル/ 1Dであるべきと仮定しましょうあなたの配列の大きさに関連するスクリプトとベクトルbewteen差リスト

中mutlipleエラーがあります

+0

'aggregate'と' var'を見てください。あるいは 'dplyr'パイプラインを試してみてください。そして、 'data [、3]'を使って3番目の列を選択してください! – Jimbou

答えて

0

について - アレイ。

  • groupvariableがリストとyouâの再いない最初の要素ではなく、すべての中だけで興味がないので、ラインgroupvariable2 <- as.factor(groupvariable[[1]])groupvariable2 <- as.factor(groupvariable)でなければなりません。

  • 一次元のみを持っているlevelidata <- variable[groupvariable==leveli]variableのでlevelidata <- variable[groupvariable==leveli,]があるべき線)または代わりcalcBetweenGroupsVariance(data[, 3],data[, 2])または必要になります(二重括弧[[]]付き)

  • あなたの関数への呼び出しがcalcBetweenGroupsVariance(data[[3]], data[[2]])する必要があります(行列ではありません)関数のベクトルの代わりにリストを渡します。