输出为行向量

时间:2016-03-21 22:59:45

标签: r

所以我知道在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循环,必须循环很多次才能完成每个可能的组合。

1 个答案:

答案 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 ...

如果您想要三维输出,请将sapplysimplify="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
# ...