运行 Map 减少矩阵的维数

标签 r matrix

假设我有三个列表:

 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/

相关文章:

matlab - 在 Matlab 中更有效地遍历矩阵元素

r - 使用for循环在R中创建一个更大的矩阵w original?

r - 将公司 Logo 添加到 ShinyDashboard 标题

r - Pivot_longer 6 列至 3 列

python - 是否可以在不使用for循环的情况下将矩阵A中的所有列与矩阵B中的每一列相乘?

c++ - 将指向数组数组的指针传递给函数

r - 按行而不是按列用向量填充下矩阵

r - 如何根据 R 中的字典将带有代码的 data.frame 映射到字符串

r - 在 R 中将一个向量拆分为三个长度不等的向量

r - 使用 R Shiny 一键下载多个 csv 文件(下载处理程序)