2016-04-22 57 views
0

所以「temp」是一個矩陣。 「unknown_position」是列表的列表,對於矩陣中的每一行,都列出哪些值用於計算該行的平均值。 「Trainindex」簡直是對應於行的臨時矩陣標誌着那些行是訓練集的一部分行位置的列表:如何循環遍歷R中的行併爲行中的特定索引計算行的平均值?

apply(temp,1, FUN = function(i) ifelse(is.element(i, trainindex), NA, (temp[i,unknown_position[[i]]]=mean(temp[i,])))) 

很顯然,我得到一個錯誤:在unknown_position錯誤[我] :在2級遞歸索引失敗

+0

獲取幫助會更容易如果您顯示temp和unknown_position的一些示例數據 – chinsoon12

+0

@iuppiter我試着根據我對問題的理解來回答您的查詢。如果這不能回答你的問題,你可能會要求改進答案。 –

回答

0

實際上,問題在於應用apply

當你在apply中定義一個函數時,它在任何時候都會保存矩陣中存在的元素。它從不保存行號。

這是錯誤的主要問題。

你應該試試這個:

lapply(seq(1,nrow(temp)), function(x){ 
    if (!is.element(x,trainindex) 
     temp[x,unknown_position[[x]]] <<- mean(temp[x,])) 
    else 
     temp[x,] <<- NA 

    return (NULL) 
}) 

如果未知位置包含NA,你可以使用mean(temp[x,],na.rm=T)代替。