Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 优化代码以最小化错误_R_Optimization - Fatal编程技术网

R 优化代码以最小化错误

R 优化代码以最小化错误,r,optimization,R,Optimization,我已经编写了下面的代码,通过更改alpha的值(使用迭代方法)来最小化错误 我使用了sapply进行基本优化。但是,如果点数超过10000,则此代码将永远运行。那么,有没有更好的实现方法或标准技术来优化(比如二分法)。如果是的话,你能帮我优化代码吗 注意:我需要alpha的值至少有4位小数 非常感谢您的帮助。用替换而不是for并不会更有效。它通常只是简单的代码 然而,您实际上可以利用代码中的矢量化,这会更快 例如,sapply(错误,函数(x)x*x)可以简单地替换为x*x。因此,R中数字的平方

我已经编写了下面的代码,通过更改alpha的值(使用迭代方法)来最小化错误

我使用了
sapply
进行基本优化。但是,如果点数超过10000,则此代码将永远运行。那么,有没有更好的实现方法或标准技术来优化(比如
二分法
)。如果是的话,你能帮我优化代码吗

注意:我需要alpha的值至少有4位小数


非常感谢您的帮助。

替换
而不是
for
并不会更有效。它通常只是简单的代码

然而,您实际上可以利用代码中的矢量化,这会更快

例如,
sapply(错误,函数(x)x*x)
可以简单地替换为
x*x
。因此,R中数字的平方误差之和就是
sum((OY-PY)**2)

因此,您的整个功能归结为:

minimizeAlpha = function(Y, OY, alpha)
    sum((OY - alpha * Y) ** 2)

这应该更有效-但首先也是最重要的是它的代码更好,可读性更好。

您可以通过
vapply
和使用返回值,即
vapply(alphas,函数(x)minimizeAlpha(Y,OY,x),数值(1))获得一些效率
应该考虑用
sapply
替换
,这不是一个优化,这是一个误解。@akrun-
sse=vapply(alphas,FUN=function(x)minimizeAlpha(Y,OY,x),FUN.VALUE=0.0)
。代码仍然在永远运行。这是正确的语法吗?我说了一些效率,但是没有那么多。否则,一个选项可能是复制长度为“Y”、“OY”和“OY”的Alpha,并应用函数,同时替换函数中的
sapply
。太好了。这很有魅力。只是为了增加我的理解,是不是这行代码占用了时间?此外,如果NPOINT进一步增加,即使这需要时间。所以,我听说有一些标准,比如
Bisection
方法来解决这些问题?我走对了吗?@KartheekPalepu是的,
sapply
行实质上是将一个高效的C操作分解成几个部分,并以R而不是C运行更多(较慢)的代码。关于第二个问题,你走对了。另外,请看一下用于实现此功能的高级策略的
optimize
optim
函数。
minimizeAlpha = function(Y, OY, alpha)
    sum((OY - alpha * Y) ** 2)