R,在阵列的每个点积分

时间:2013-04-10 08:46:26

标签: arrays r convolution integrate

我坚持计算数组每个点的积分。这个想法首先是创建一个函数(“Integrand”)。然后,创建第二个函数(“MyConvolve”)来计算必要的积分。

以下是我现在所做的事情:

Integrand = function(s,x)
{ 1/4*(abs(x-s)<=1)*(abs(s)<=1) }

MyConvolve = function(func,data)
{ return( integrate(func, lower=-Inf, upper=Inf, data) ) }

现在,使用某个数组运行代码,我收到一条错误消息:

SomeMatrix = replicate(10, rnorm(10))
MyConvolve(Integrand, SomeMatrix)

最终会出现以下错误消息:

Error in integrate(func, lower = -Inf, upper = Inf, data) :
evaluation of function gave a result of wrong length

我已经尝试过对该函数进行矢量化,但最终还是出现了错误消息。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我不确定我明白你想要计算什么, 但如果你想评估MyConvolve(Integrand,s), 其中s获取SomeMatrix中的所有值, 那么apply就足够了。

sapply( SomeMatrix, function(s) MyConvolve( Integrand, s )$value )

但是,矩阵的尺寸会丢失。 您可以按如下方式恢复它们:

result <- SomeMatrix
result[] <- sapply( SomeMatrix, function(s) MyConvolve( Integrand, s )$value )