列出 R 中的两个主要索引
List with two main indices in R
我有一个带有三个参数(一个矩阵和两个参数)的函数返回一个列表。我想为每个 a
和 b
值存储函数值(此处为矩阵列表),以便我可以从其索引中提取特定值。
下面是一个最小的例子。 (不工作但解释情况)
我怎样才能做到这一点?
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)
这样的事情怎么样?这 return 是 list
个 ff
return 个对象;每个 list
条目对应一个特定的 a
、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
值。然后,每个元素都是一个 list
,它是特定 a
、b
对的 ff
的 return 对象。 IMO,使用起来更加笨拙(而且不整洁),但是你开始吧:
library(tidyverse)
expand.grid(a, b) %>%
rowwise() %>%
mutate(res = list(ff(X, Var1, Var2))) %>%
ungroup() %>%
spread(Var1, res)
## A tibble: 4 x 4
# Var2 `1` `2` `3`
# <dbl> <list> <list> <list>
#1 4. <list [2]> <list [2]> <list [2]>
#2 5. <list [2]> <list [2]> <list [2]>
#3 6. <list [2]> <list [2]> <list [2]>
#4 7. <list [2]> <list [2]> <list [2]>
我有一个带有三个参数(一个矩阵和两个参数)的函数返回一个列表。我想为每个 a
和 b
值存储函数值(此处为矩阵列表),以便我可以从其索引中提取特定值。
下面是一个最小的例子。 (不工作但解释情况)
我怎样才能做到这一点?
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)
这样的事情怎么样?这 return 是 list
个 ff
return 个对象;每个 list
条目对应一个特定的 a
、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
值。然后,每个元素都是一个 list
,它是特定 a
、b
对的 ff
的 return 对象。 IMO,使用起来更加笨拙(而且不整洁),但是你开始吧:
library(tidyverse)
expand.grid(a, b) %>%
rowwise() %>%
mutate(res = list(ff(X, Var1, Var2))) %>%
ungroup() %>%
spread(Var1, res)
## A tibble: 4 x 4
# Var2 `1` `2` `3`
# <dbl> <list> <list> <list>
#1 4. <list [2]> <list [2]> <list [2]>
#2 5. <list [2]> <list [2]> <list [2]>
#3 6. <list [2]> <list [2]> <list [2]>
#4 7. <list [2]> <list [2]> <list [2]>