作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在两个列表上运行以下函数:
function(Z, p) {
imp <- as.vector(cbind(imp=rowSums(Z)))
exp <- as.vector(t(cbind(exp=colSums(Z))))
x = p + imp
ac = p + imp - exp
einsdurchx = 1/as.vector(x)
einsdurchx[is.infinite(einsdurchx)] <- 0
A = Z %*% diag(einsdurchx)
R = solve(diag(length(p))-A) %*% diag(p)
C = ac * einsdurchx
R_bar = diag(as.vector(C)) %*% R
rR_bar = round(R_bar)
return(rR_bar)
}
matrix
上运行良好和一个
vector
.但是,我需要在
list of matrices
上运行此功能和一个
list of vectors
.我到目前为止尝试过
lapply/mapply
关注此
example , 见下文。这里有一些示例数据显示了我的数据结构:
Z <- list("111.2012"= matrix(c(0,0,100,200,0,0,0,0,50,350,0,50,50,200,200,0),
nrow = 4, ncol = 4, byrow = T),
"112.2012"= matrix(c(10,90,0,30,10,90,0,10,200,50,10,350,150,100,200,10),
nrow = 4, ncol = 4, byrow = T))
p <- list("111.2012"=c(200, 1000, 100, 10), "112.2012"=c(300, 900, 50, 100))
lapply
我试过的代码(我在 X 和 Y 的函数中更改了所有 Z 和 p,不知道是否需要):
lapply(X=Z, Y=p, function(Z, p) {
imp <- as.vector(cbind(imp=rowSums(X)))
exp <- as.vector(t(cbind(exp=colSums(X))))
x = Y + imp
ac = Y + imp - exp
einsdurchx = 1/as.vector(x)
einsdurchx[is.infinite(einsdurchx)] <- 0
A = X %*% diag(einsdurchx)
R = solve(diag(length(Y))-A) %*% diag(Y)
C = ac * einsdurchx
R_bar = diag(as.vector(C)) %*% R
rR_bar = round(R_bar)
return(rR_bar)
} )
$'112.2012'
[,1] [,2] [,3] [,4]
[1,] 174 191 31 4
[2,] 0 450 0 0
[3,] 11 188 49 1
[4,] 14 171 20 5
$'111.2012'
[,1] [,2] [,3] [,4]
[1,] 45 14 0 1
[2,] 8 670 0 2
[3,] 190 157 44 59
[4,] 57 59 6 38
最佳答案
您可以使用 mapply
,这是 lapply
的一种多元版本,对于这个任务
fun <- function(Z, p) {
imp <- as.vector(cbind(imp=rowSums(Z)))
exp <- as.vector(t(cbind(exp=colSums(Z))))
x = p + imp
ac = p + imp - exp
einsdurchx = 1/as.vector(x)
einsdurchx[is.infinite(einsdurchx)] <- 0
A = Z %*% diag(einsdurchx)
R = solve(diag(length(p))-A) %*% diag(p)
C = ac * einsdurchx
R_bar = diag(as.vector(C)) %*% R
rR_bar = round(R_bar)
return(rR_bar)
}
Z <- list("111.2012"= matrix(c(0,0,100,200,0,0,0,0,50,350,0,50,50,200,200,0),
nrow = 4, ncol = 4, byrow = T),
"112.2012"= matrix(c(10,90,0,30,10,90,0,10,200,50,10,350,150,100,200,10),
nrow = 4, ncol = 4, byrow = T))
p <- list("111.2012"=c(200, 1000, 100, 10),
"112.2012"=c(300, 900, 50, 100))
mapply(fun, Z, p, SIMPLIFY = FALSE)
## $`111.2012`
## [,1] [,2] [,3] [,4]
## [1,] 174 191 31 4
## [2,] 0 450 0 0
## [3,] 11 188 49 1
## [4,] 14 171 20 5
## $`112.2012`
## [,1] [,2] [,3] [,4]
## [1,] 45 14 0 1
## [2,] 8 670 0 2
## [3,] 190 157 44 59
## [4,] 57 59 6 38
关于R:如何在两个列表上运行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475029/
我是一名优秀的程序员,十分优秀!