我有一个函数,其参数是一个列表。此参数针对不同的值运行。我原来的功能很难。因此,我发布了一个类似于我的部分功能的例子。
这里的例子是乘法(只是为了显示这个想法)。我认为for
在这里不起作用,因为for
循环逐个元素,而我需要同时采用列表中的两个不同元素
如何使代码xxx <- myfun(z[[1]][k,j],z[[2]][k,i]))
的这一部分适用于arbirtary数量的元素,而不是手动执行。
例如,如果我有3
矩阵,那么,我会将代码编写为:
xxx <- myfun(z[[1]][k,j],z[[2]][k,i], z[[3]][k,j])
。如何自动不手动。
例如,z
是一个矩阵列表。我想为这些矩阵的特定值运行我的函数。也就是说,每次我希望我的函数选择我的矩阵的特定元素。这是我的代码:
x <- c(0,1,2,
0,0,1,
0,0,0)
x <- matrix(x,3,3)
y <- c(0,2,3,
0,0,1,
0,0,0)
y <- matrix(y,3,3)
z <- list(x,y)
myfun <- function(f=list()){
s <- length(f)
xy <- list()
for(i in 1:s){
xy[[i]] <- 2*f[[i]]
}
xy
}
这里,我希望函数从矩阵x
和y
中获取特定值,并将它们插入到函数中的列表中。我想使它适用于列表中任意数量的元素。也就是说,有时候,我有3
个矩阵或4
。因此,矩阵的数量不固定。
##我尝试以下方法并且工作正常,但是,如何使其适用于任意数量的元素。
xxx <- list()
for(i in 1:2){
for(k in 1:3){
for(j in 1:3){
xxx[[i]] <- myfun(f=list(z[[1]][1,2],z[[2]][1,2]))
}
}
}
请帮忙吗?
答案 0 :(得分:0)
如果我正确理解以下位
我的所有想法是如何让这个
xxx <- myfun(z[[1]][k,j],z[[2]][k,i], z[[3]][k,j])
自动为长度的数量而自动
这应该是你想要的:
xxx <- myfun(f=lapply(z, function(x){x[k,j]}))
对于k = 1且j = 2
xxx <- myfun(f=lapply(z, function(x){x[1,2]}))
返回与您提供的示例相同的内容。