我有一个带有三个参数(一个矩阵和两个参数)的函数,该函数返回一个列表。我想为每个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)
答案 0 :(得分:1)
这样的事情怎么样?这将返回#pragma pack
个返回对象中的一个list
;每个ff
条目都对应于特定的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
,ff
对的a
的返回对象。 IMO,这比较麻烦(而且不整洁),但是您可以使用:
b