R语言: Unexpected behaviour with function arguments in lapply

标签 r list matrix lapply

我正在尝试创建一个包含独立同分布正态数的矩阵列表。举个简单的例子,让矩阵为 4×2 并考虑一个长度为 3 的列表。以下代码似乎应该有效(对我来说):

MyMatrix <- lapply(1:3, function() {matrix(rnorm(8), 4, 2)})

但是它失败了,错误如下:

Error in FUN(1:3[[1L]], ...) : unused argument (1:3[[1]])

一时兴起,我尝试了:

MyMatrix <- lapply(1:3, function(x) {matrix(rnorm(8), 4, 2)})

成功了!但为什么? x 未在函数中的任何位置使用,并且在实验中,表达式的行为不受 x 是否已存在于工作区中的影响。它似乎完全是多余的。

我是 R 的新手,所以如果有经验的用户能解释这里发生了什么以及为什么我的第一行失败,我将不胜感激。

最佳答案

你不能有一个不接受参数然后将参数传递给它的函数。这正是您在运行 lapply 时所做的,因为每个值都作为第一个参数依次传递给该函数。例如

out <- lapply(1:3, function(x) x)
str(out)
#List of 3
# $ : int 1
# $ : int 2
# $ : int 3

抛出错误的简单示例:

test <- function() {"woot"}
test()
#[1] "woot"
test(1) 
#Error in test(1) : unused argument (1)
lapply(1:3, test)
#Error in FUN(1:3[[1L]], ...) : unused argument (1:3[[1]])

对于 R 来说,出错是一种很好的形式,因为这可能意味着您期望函数的返回结果会根据传递给函数的参数发生变化。它不会。基本 R 中包含类似这样的函数,例如 Sys.time(),如果您尝试向它传递多余的参数,这些参数将失败,否则这些参数可能有意义:

Sys.time()
#[1] "2014-07-07 13:22:11 EST"
Sys.time(tz="UTC")
#Error in Sys.time(tz = "UTC") : unused argument (tz = "UTC")

关于R语言: Unexpected behaviour with function arguments in lapply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24602509/

相关文章:

c++ - 在矩阵中寻找最长的递增路径

javascript - 有没有办法从 4x4 矩阵计算 X 和 Y 轴上的 3D 旋转

matlab - 基于向量创建逐行增加差异的矩阵

css - 在 R Shiny 中闪烁加载文本

r - 为什么 jsonlite 将数据解析为列表对象?

r - 根据组合为列表中的数据框分配名称

R:对列表中的所有数据框进行子集化

r - R 究竟如何解析 `->` ,右赋值运算符?

r - 如何编写仅适用于 r 矩阵中奇数列的 apply() 函数?

c# - 在 C# 中创建不同的列表