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]))
}
}
}
它给了我以下错误:
crossprod中的错误(data [order_indexes [1:k] + 1,missindex],权重): 不一致的论点
当我检查k为0时,但在我的代码中k是从1到m-1。
答案 0 :(得分:0)
1:n-1
不是1,...,n-1,而是0,...,n-1,因为:
的优先级高于+
。
而不是1:n-1
,请使用seq(n-1)
或1:(n-1)
。