所以我知道在R
中你可以使用outer()
命令来简化通常需要使用for循环来评估的两个网格值的计算。例如,
x = 1:10
y = 1:10
f = function(x,y){
ans = x*y
return(ans)
}
outer(x,y,f)
现在,这是有效的,因为任何x[i]*x[y]
的{{1}}输出都是标量。但是,如果i
的输出是向量,您仍然可以以类似的方式应用x*y
命令吗?
例如,是否有像outer()
这样的快速方法来计算所有输出,这些输出是以下内容的向量:
outer()
这些例子有点微不足道,但我正在研究一个问题,即我有三个嵌入式for循环,必须循环很多次才能完成每个可能的组合。
答案 0 :(得分:1)
不确定您之后的情况,但这是一个开始(假设f
实际上是x*y + rep(1,3)
):
do.call(mapply, c(f, expand.grid(x=x, y=y)))
# [,1] [,2] [,3] [,4] [,5] ...
# [1,] 2 3 4 5 6 ...
# [2,] 2 3 4 5 6 ...
# [3,] 2 3 4 5 6 ...
如果您想要三维输出,请将sapply
与simplify="array"
一起使用:
sapply(x, function(xx) sapply(y, function(yy) f(xx, yy)), simplify = "array")
# , , 1
#
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 2 3 4 5 6 7 8 9 10 11
# [2,] 2 3 4 5 6 7 8 9 10 11
# [3,] 2 3 4 5 6 7 8 9 10 11
# ...