有(至少)两种方法可以执行此操作,显式(for
-loop)方法和隐式(矢量化)方法。
function(x) { s <- 0 for (i in seq_along(x)) { s <- s + (x[i]^4 - 16*x[i]^2 + 5*x[i])/2 } s }
(先前发布的答案建议您可以使用sapply()
,但是比显式for
循环难理解一点……)
由于R自动执行标准的算术运算(^
,*
,-
,+
,/
)以矢量方式,可以计算上一次全部元素的该表达式中,然后使用sum()
函数。向量化的解决方案更快,更容易阅读(一旦您习惯了)。
function(x) { sum((x^4 - 16*x^2 + 5*x)/2) }