在R中,我们有一个数组和一个矩阵:

a <- array(rep(1:3, each = 4), dim = c(2, 2, 3))
b <- matrix(seq(0, 1, length.out = 6), nrow = 2, ncol = 3)

我想使用一个函数,该函数使用第三维a中的矩阵和b中的列作为其两个参数.对于这个例子,我们可以假设我的函数是:

myfunc <- function(x, y) { x * y }

我希望该操作返回一个3Darray.我目前的解决方案是使用sapply作为索引,并随后将结果列表转换为数组:

res <- sapply(1:dim(a)[[3]], FUN = \(x) myfunc(a[, , x], b[, x]), simplify = FALSE) 
res <- abind::abind(res, along = 3)

有没有其他方法可以实现这一操作,从而直接生成3D数组?我try 了sweep次,但失败了.

推荐答案

一种可能的方法是将您的3D数组和矩阵更改为列表并使用mapply.在这里,我编写了一个简单的a函数(to_list()),它执行数组到列表的转换(默认情况下沿着最后一个数组维度).

to_list <- function(x, along=length(dim(x))) {
  apply(x, along, identity, simplify=F)
}

res <- mapply(myfunc, to_list(b), to_list(a), SIMPLIFY=F)
res <- sapply(res, identity, simplify='array')

sapply行和你的abind行做同样的事情.

R相关问答推荐

self_函数无法工作--无法子集结束后的列

更改网格的crs以匹配简单要素点对象的crs

如何使用R对每组变量进行随机化?

用值序列对行进行子集化,并标识序列开始的列

如何根据R中其他列的值有条件地从列中提取数据?

在组中添加值增加和减少的行

将包含卷的底部25%的组拆分为2行

在df中保留原始变量和新变量

R中插入符号训练函数的中心因子和尺度因子预测

在R gggplot2中是否有一种方法将绘图轴转换成连续的 colored颜色 尺度?

从一个列表的框架中移除列表包装器

使用rvest从多个页面抓取时避免404错误

展开对数比例绘图的轴(添加填充)

R如何计算现有行的总和以添加新的数据行

将摘要图添加到facet_WRAP gglot的末尾

通过初始的shiny 应用更新部署的shiny 应用的数据和参数,其中部署的应用程序显示为URL

为什么将负值向量提升到分数次方会得到NaN

名字的模糊匹配

使用列名和r中的前缀 Select 列的CREATE函数

从矩阵创建系数图