R语言:Lappy中函数参数的意外行为

R语言:Lappy中函数参数的意外行为,r,list,matrix,lapply,R,List,Matrix,Lapply,我试图创建一个包含iid正常数的矩阵列表。为了一个简单的例子,让矩阵为4乘2,并考虑长度为3的列表。以下代码(对我来说)似乎应该可以工作: 一时兴起,我试着: MyMatrix <- lapply(1:3, function(x) {matrix(rnorm(8), 4, 2)}) MyMatrix您不能让一个函数不接受参数然后将参数传递给它。这正是运行lappy时所做的,因为每个值都作为第一个参数依次传递给函数。例如 out <- lapply(1:3, function(x)

我试图创建一个包含iid正常数的矩阵列表。为了一个简单的例子,让矩阵为4乘2,并考虑长度为3的列表。以下代码(对我来说)似乎应该可以工作:

一时兴起,我试着:

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

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

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

如果在函数中不使用
x
lappy
不知道如何处理
1:3
。它被使用,。。。。作为列表元素的名称。@bondedust-如果您使用
sapply
-
sapply(字母[1:3],函数(x)10)
,则会出现名称,但是
lappy
-
lappy(字母[1:3],函数(x)10)
不是我所期望的。如果将sapply与一组矩阵返回一起使用,它们将得到
rind()
-ed。。。解释为什么
sapply(1:3,函数(x){matrix(rnorm(8),4,2)})
不返回包含12行的矩阵?(我今天似乎过得不好。)@bondedust-因为默认情况下
sapply
将使用
simplify2array
将所有矩阵转换为向量,然后绑定它们。您可以使用
sapply(1:3,函数(x){matrix(rnorm(8),4,2)},simplify=“array”)
sapply
中得到一个12行/2列的数组,这是我刚刚发现的。您的意思是1:3的元素(在我的问题中)作为第一个参数自动传递给函数吗(因此,如果不指定参数,我会得到一个错误)?太棒了,谢谢!从文档中我不清楚这一点(我可能很迟钝),但这是有道理的。你介意将这一点添加到你的答案中吗,因为这是困扰我的一点?还有+1+勾选
MyMatrix <- lapply(1:3, function(x) {matrix(rnorm(8), 4, 2)})
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]])
Sys.time()
#[1] "2014-07-07 13:22:11 EST"
Sys.time(tz="UTC")
#Error in Sys.time(tz = "UTC") : unused argument (tz = "UTC")