2017-01-28 10 views
0
data = matrix(1:12, 3,4) 
n=ncol(data) 
m=nrow(data) 

for (i in 1:m){ 
    for (j in 1:n-1){ 
    missindex = sample(1:n,j) 
    temp <- data[,-missindex] 
    distances <- dist(temp)[1:m-1] 
    similarity <- 1-distances/max(distances) 
    order_indexes <- order(similarity,decreasing = T) 
    similarity_order <- similarity[order_indexes] 
    for (k in 1:m-1){ 
     weights <- similarity_order[1:k]/sum(similarity_order[1:k]) 
     imputedata <- crossprod(data[order_indexes[1:k]+1,missindex], weights) 
     MAE <- mean(abs(imputedata-data[i,missindex])) 
     RMSE <- sqrt(mean((imputedata - data[i,missindex])^2)) 
     MAPE <- mean(abs((imputedata-data[i,missindex])/data[i,missindex])) 
    } 
    } 
} 

にゼロになりません。はなぜ私のインデックスが、それは私に次のエラーを与えるR

+0

内部ループで 'j in 1:(n-1)'を使用します。つまり、 'n-1'の前後にカッコを入れます。 'R intro'マニュアルを読んでください。 – Bhas

+0

@Bhasそのループだけではありません。 'k'のループでも。 –

+0

OPには、これは多くの重複を持つ優先順位の問題です。 –

答えて

0

1:n-1は、+よりも高い優先度を持つため、1、...、n-1ではなく、0、...、n-1ではありません。

1:n-1の代わりに、seq(n-1)または1:(n-1)を使用してください。

関連する問題