假设我有三个列表:
l_zero
[[1]]
[,1] [,2]
[1,] 0 0
[2,] 0 0
[[2]]
[,1] [,2]
[1,] 0 0
[2,] 0 0
l_ind <- list(matrix(c(1,1), ncol = 2), matrix(c(1,1,1,2), ncol = 2))
l_ind
[[1]]
[,1] [,2]
[1,] 1 1
[[2]]
[,1] [,2]
[1,] 1 1
[2,] 1 2
l_val <- list(5, c(4, 7))
l_val
[[1]]
[1] 5
[[2]]
[1] 4 7
我想在三个列表上运行Map
,目的是用l_ind
中的坐标替换l_zero
中的零来自l_val
的值。
我的尝试给了我以下结果:
Map(function(l_zero, l_ind, l_val) l_zero[l_ind] <- l_val, l_zero = l_zero, l_ind = l_ind, l_val = l_val)
[[1]]
[1] 5
[[2]]
[1] 4 7
正如您所看到的,矩阵的原始维度减少了,但我想保留矩阵的维度,只是将值替换为 l_ind
中的坐标。我尝试了 l_zero[l_ind, drop = FALSE]
,但这也没有帮助。
有人可以帮我解决这个问题吗?
最佳答案
这里有一个更简单的方法,[<-
替换功能可用于 Map()
的函数参数。它按顺序需要三个参数。
Map("[<-", l_zero, l_ind, l_val)
# [[1]]
# [,1] [,2]
# [1,] 5 0
# [2,] 0 0
#
# [[2]]
# [,1] [,2]
# [1,] 4 7
# [2,] 0 0
关于运行 Map 减少矩阵的维数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29066646/