在R中具有两个主要索引的列表

时间:2018-07-17 12:26:17

标签: r list function loops indices

我有一个带有三个参数(一个矩阵和两个参数)的函数,该函数返回一个列表。我想为每个ab值存储函数值(此处为矩阵列表),以便可以从其索引中提取特定值。

下面是一个最小的示例。 (无法正常工作,但可以说明情况

我该如何实现?

   ff <- function(X,a,b){
      ff1 <- a*X+b
      ff2 <- (a+b)*colSums(X)
      list(ff1,ff2)
    }

    X <- matrix(c(10,15,20,25),2)
    a <- c(1,2,3)
    b <- c(4,5,6,7)

    res <-  # ??????

    for(i in 1:length(a)){
      for(j in 1:length(b)){
        res[??????] <- ff(X,a[i],b[j])  # WRONG
      }
    }

    # WANT TO GET, for example
    res[2,3] # = ff(X,a=2,b=6)

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样?这将返回#pragma pack个返回对象中的一个list;每个ff条目都对应于特定的lista组合。

b

更新

可以res <- apply(as.data.frame(expand.grid(a, b)), 1, function(w) ff(X, w[1], w[2])) str(res) #List of 12 # $ :List of 2 # ..$ : num [1:2, 1:2] 14 19 24 29 # ..$ : num [1:2] 125 225 # $ :List of 2 # ..$ : num [1:2, 1:2] 24 34 44 54 # ..$ : num [1:2] 150 270 # $ :List of 2 # ..$ : num [1:2, 1:2] 34 49 64 79 # ..$ : num [1:2] 175 315 # $ :List of 2 # ..$ : num [1:2, 1:2] 15 20 25 30 # ..$ : num [1:2] 150 270 # $ :List of 2 # ..$ : num [1:2, 1:2] 25 35 45 55 # ..$ : num [1:2] 175 315 # $ :List of 2 # ..$ : num [1:2, 1:2] 35 50 65 80 # ..$ : num [1:2] 200 360 # $ :List of 2 # ..$ : num [1:2, 1:2] 16 21 26 31 # ..$ : num [1:2] 175 315 # $ :List of 2 # ..$ : num [1:2, 1:2] 26 36 46 56 # ..$ : num [1:2] 200 360 # $ :List of 2 # ..$ : num [1:2, 1:2] 36 51 66 81 # ..$ : num [1:2] 225 405 # $ :List of 2 # ..$ : num [1:2, 1:2] 17 22 27 32 # ..$ : num [1:2] 200 360 # $ :List of 2 # ..$ : num [1:2, 1:2] 27 37 47 57 # ..$ : num [1:2] 225 405 # $ :List of 2 # ..$ : num [1:2, 1:2] 37 52 67 82 # ..$ : num [1:2] 250 450 的输出存储在ff中,其中列对应于tibble,行对应于a值。那么每个元素都是一个b,它是特定listff对的a的返回对象。 IMO,这比较麻烦(而且不整洁),但是您可以使用:

b