使用R中的apply设置矩阵元素

时间:2014-04-29 01:00:36

标签: r apply

我正在尝试将数据框中的值分配到矩阵中。列2和3分别映射到矩阵中的行和列。这不起作用,因为sim.mat没有存储值。

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 个答案:

答案 0 :(得分: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

这种类型的编程实际上不建议使用副作用。