r语言 - 运行映射减少了矩阵的维度

  • 本文关键字:r语言 运行 映射 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_zerol_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
您需要

从映射的函数返回修改后的值(请参阅下面的return(l_zero))。

l_zero <- replicate(2,matrix(0,2,2),simplify=FALSE)
l_ind <- list(matrix(c(1,1), ncol = 2), matrix(c(1,1,1,2), ncol = 2))
l_val <- list(5, c(4, 7))
ff <- function(l_zero, l_ind, l_val) {
    l_zero[l_ind] <- l_val
    return(l_zero)
}
Map(ff, l_zero = l_zero, l_ind = l_ind, l_val = l_val)

结果:

## [[1]]
##      [,1] [,2]
## [1,]    5    0
## [2,]    0    0
## 
## [[2]]
##      [,1] [,2]
## [1,]    4    7
## [2,]    0    0

最新更新