考虑矩阵d和rwith dim(d) = J x D和dim(r) = J x R.让fun(a,b)成为一个函数,它接受两个相同长度的向量并返回一些数字.
我想把列的d和列r分别作为我感兴趣的单位,并适用outer于它们.
下面的代码创建的列的列表来完成这个d和r,然后同时使用outer和sapply:
d.cols <- split(d, col(d))
r.cols <- split(r, col(r))
outer(d.cols, r.cols,
function(x,y) {
sapply(seq_along(x),
function(i) {
Fun(x[[i]], y[[i]]) })} )
Run Code Online (Sandbox Code Playgroud)
代码做我想要的并且相对有效,但是笨拙且不清楚.有没有更好的方法来实现我想要达到的目标?
Pra*_*ani 10
你很近.如本相关问题所述,您只需Vectorize()要将Fun()函数转换为矢量化版本的功能:
VecFun <- Vectorize( Fun )
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地做:
outer(d.cols, r.cols, VecFun )
Run Code Online (Sandbox Code Playgroud)
例如,如果你定义
Fun <- function(a,b) sum(a+b)
Run Code Online (Sandbox Code Playgroud)
和r,d矩阵定义如下:
J <- 5
D <- 3
R <- 4
d <- matrix( 1:(J*D), J, D)
r <- matrix( 1:(J*R), J, R)
Run Code Online (Sandbox Code Playgroud)
然后你得到这个:
> outer(d.cols, r.cols, VecFun)
1 2 3 4
1 30 55 80 105
2 55 80 105 130
3 80 105 130 155
Run Code Online (Sandbox Code Playgroud)