我有一个函数,它的参数是一个列表。此参数针对不同的值运行。我原来的功能很困难。因此,我发布了一个类似于我的部分功能的示例。
这里的例子是乘法(只是为了说明这个想法)。我想 for
不能在这里工作,因为,for
循环逐个元素地获取,而我需要同时获取列表的两个不同元素
所有的想法是,
如何制作这部分代码xxx <- myfun(z[[1]][k,j],z[[2]][k,i]))
适用于任意数量的元素,而不是手动执行。
例如,如果我有 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]))
}
}
}
请问有什么帮助吗?
最佳答案
如果我正确理解以下内容
All the idea is how can I make this
xxx <- myfun(z[[1]][k,j],z[[2]][k,i], z[[3]][k,j])
works for arbirtary number of length, automatically
这应该是你正在寻找的:
xxx <- myfun(f=lapply(z, function(x){x[k,j]}))
对于 k=1 和 j=2
xxx <- myfun(f=lapply(z, function(x){x[1,2]}))
返回与您提供的示例相同。
关于r - 如何同时提取列表的不同元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49146937/