关于lapply的使用

Che*_*het 5 for-loop r lapply

有人向我发送了以下代码,该代码以列表格式重复相同的命令 (mvrnorm) 10 次。

dat <- lapply(1:10,mvrnorm, n = 10, Sigma=matrix(.3, 3, 3), mu = rep(0, 3))
Run Code Online (Sandbox Code Playgroud)

该代码有效。

但是,当我尝试以下命令时,它不起作用,我不明白为什么它不起作用。我希望它重复计算 'x' 中的列数十次:

dat <- lapply(1:10, ncol, x=matrix(.3, 4, 4))

Error in FUN(X[[i]], ...) : unused argument (X[[i]])
Run Code Online (Sandbox Code Playgroud)

基本上,我试图了解以下格式在什么情况下有效:

lapply(1:10, function, ...)
Run Code Online (Sandbox Code Playgroud)

如果有人可以向我解释为什么它在函数是mvrnorm(第一个示例)而不是ncol(第二个示例)时有效?

Rol*_*and 3

基本上,我试图了解以下格式在什么情况下有效:

lapply(1:10, fun, ...)

fun在所有有多个参数的情况下。

让我们将调用转换lapply为等效for循环:

X <- as.list(1:10) #elements to iterate over
res <- vector(mode = "list", length = length(X)) #pre-allocate results list
for (i in seq_along(X)) res[[i]] <- fun(X[[i]], ...)
Run Code Online (Sandbox Code Playgroud)

现在,如果您调用具有多个参数的单参数函数,您会收到一条错误消息。您还应该阅读函数调用中的参数匹配是如何完成的。在您的示例中,lapply(1:10, ncol, x=matrix(.3, 4, 4))您混合进行了名称匹配和位置匹配。由于名称匹配优先,因此x将参数传递给ncol,然后将 的元素1:10用作第二个参数。这就是为什么错误告诉您这X[[i]]是一个未使用的参数。