如何同时提取列表的不同元素

时间:2018-03-07 08:07:22

标签: r

我有一个函数,其参数是一个列表。此参数针对不同的值运行。我原来的功能很难。因此,我发布了一个类似于我的部分功能的例子。

这里的例子是乘法(只是为了显示这个想法)。我认为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
}

这是我的尝试。

请注意,

这里,我希望函数从矩阵xy中获取特定值,并将它们插入到函数中的列表中。我想使它适用于列表中任意数量的元素。也就是说,有时候,我有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]))
  }
}
}

请帮忙吗?

1 个答案:

答案 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]}))

返回与您提供的示例相同的内容。