我一直在计算数组每个点的积分。这个想法首先是创建一个函数(“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
我已经尝试过对函数进行矢量化,但最终仍然出现错误消息。
我不确定我是否理解您要计算的内容, 但如果你想评估
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 )