我正在尝试将数据框中的值分配到矩阵中。列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)
这是正确的做法吗?如果是,我怎样才能让它发挥作用。
答案 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
这种类型的编程实际上不建议使用副作用。