2014-04-29 77 views
1

我想將數據框中的值分配到矩陣中。列2和列3分別映射到矩陣中的行和列。由於sim.mat沒有存儲這些值,所以這不起作用。設置矩陣元素使用適用於R

score <- function(x, sim.mat) { 
    r <- as.numeric(x[2]) 
    c <- as.numeric(x[3]) 
    sim.mat[r,c] <- as.numeric(x[4]) 
} 


mat <- apply(sim.data, 1, score, sim.mat) 

這是正確的做法嗎?如果是的話我怎麼才能讓它工作。

回答

1

無需apply,試試這個:

score <- function(x, sim.mat) { 
    r <- as.numeric(x[[2]]) 
    c <- as.numeric(x[[3]]) 
    sim.mat[cbind(r,c)] <- as.numeric(x[[4]]) 
    sim.mat 
} 

mat <- score(sim.data, sim.mat) 

檢查的?"["對文檔中的 「矩陣和陣列」 一節。


如果你真的想使用apply像你這樣,你需要你的函數修改sim.data在調用環境,做到:

score <- function(x, sim.mat) { 
    r <- as.numeric(x[2]) 
    c <- as.numeric(x[3]) 
    sim.mat[r,c] <<- as.numeric(x[4]) 
} 

apply(sim.data, 1, score, sim.mat) 
sim.mat 

這種類型的節目,其中的功能有副作用真的不推薦。