嵌套适用于lapply循环列矩阵的列

我有一个矩阵列表,我试图将函数应用于每个矩阵的每一列。自然的方式来做到这一点,我想,就是窝applylapply,但是当我这样做,它给了我一个错误:嵌套适用于lapply循环列矩阵的列

library(hydroGOF) # for the mse function 

# Create a vector for comparison

A <- rnorm(10)

# Create a list of matrices to be looped over

B <- rnorm(10 * 5 * 3)

list.element.number <- rep(1:3, 50)

B.list <- split(B, list.element.number)

B.list <- lapply(B.list, matrix, ncol = 5, nrow = 10) # A 3 element list of 10 x 5 matrices

# Wrapper function for mse

my.mse <- function(sim) {

mse(sim, A)

}

# I'm trying to loop through each column of B.list and compare it to A

lapply(B.list, apply, MARGIN = 2, FUN = my.mse)

# Error in FUN(X[[1L]], ...) :

# unused arguments (function (X, MARGIN, FUN, ...)

# {

# FUN <- match.fun(FUN)

# dl <- length(dim(X))

# if (!dl) stop("dim(X) must have a positive length")

# if (is.object(X)) X <- if (dl == 2) as.matrix(X) else as.array(X)

# d <- dim(X)

# dn <- dimnames(X)

# ds <- seq_len(dl)

# if (is.character(MARGIN)) {

# if (is.null(dnn <- names(dn))) stop("'X' must have named dimnames")

# MARGIN <- match(MARGIN, dnn)

# if (anyNA(MARGIN)) stop("not all elements of 'MARGIN' are names of dimensions")

# }

# s.call <- ds[-MARGIN]

# s.ans <- ds[MARGIN]

# d.call <- d[-MARGIN]

# d.ans <- d[MARGIN]

# dn.call <- dn[-MARGIN]

# dn.ans <- dn[MARGIN]

# d2 <- prod(d.ans)

# if (d2 == 0) {

# newX <- array(vector(typeof(X), 1), dim = c(prod(d.call), 1))

# ans <- FUN(if (length(d.call) < 2) newX[, 1] else array(newX[, 1], d.call, dn.call), ...)

# return(if (is.null(ans)) ans else if (length(d.ans) < 2) ans[1][-1] else array(ans, d.ans, dn.a

理想的情况下,这会给我一个3元素列表,其中每个元素都是一个5元素的向量,但是我得到一个错误。有谁知道如何解决这个问题(除了for循环,感觉不雅),或者出了什么问题?

回答:

FUN=my.mse正在劫持您的企图lapplyapply。我想你想:

lapply(B.list, function(x) apply(x, 2, my.mse)) 

不能指定FUN在相同的呼叫都lapplyapply(除非你使用的位置匹配的康拉德建议)。发生了什么事是你的电话是越来越像这样匹配:

lapply(B.list, FUN=my.mse, ...=list(apply, MARGIN=2)) 

,然后在你的第一次迭代导致试图评估:

my.mse(B.list[[1]], apply, MARGIN=2) 

,而不是你预期apply(B.list[[1]], 2, my.mse)。由于my.mse只接受一个参数,因此会出现关于“未使用参数”的错误。如果仔细观察,“未使用的参数”是apply函数的主体。

以上是 嵌套适用于lapply循环列矩阵的列 的全部内容, 来源链接: utcz.com/qa/266706.html

回到顶部