R语言下如何编写函数b以实现函数a的累加运算?
实现R语言中函数a的累加函数b
嘿,这事儿不难,我给你整理几种靠谱的实现方式,从直观到高效的都有:
首先先确认下原函数a的定义,避免理解偏差:
a <- function(x){ a = 2*x*x return(a) }
方法一:用循环实现(直观易懂)
这种方式最直白,适合刚接触R的朋友理解逻辑:我们初始化一个累加值,然后从1到x逐个调用a函数,把结果加起来。
b <- function(x){ total <- 0 for(i in 1:x){ total <- total + a(i) } return(total) }
调用试试:b(3) 应该返回 2*(1+4+9)=28,验证一下没问题。
方法二:向量化操作(R风格的简洁写法)
R天生擅长向量化运算,我们可以直接生成1到x的序列,用sapply批量调用a函数,最后用sum求和,一行就能搞定:
b <- function(x){ sum(sapply(1:x, a)) }
或者用更严谨的vapply(指定返回类型,效率略高一点):
b <- function(x){ sum(vapply(1:x, a, numeric(1))) }
这种写法比循环更符合R的编程习惯,代码也更简洁。
方法三:数学公式法(最高效,适合大x值)
其实我们可以先推导累加的数学公式,避免循环或者批量计算,效率拉满:
因为a(n)=2n²,所以累加和就是2*(1²+2²+...+n²),而平方和的公式是n(n+1)(2n+1)/6,代入后得到:b(x) = 2 * x*(x+1)*(2x+1)/6 = x*(x+1)*(2x+1)/3
直接用这个公式写函数,不管x多大,都是O(1)的计算量:
b <- function(x){ x*(x+1)*(2*x + 1)/3 }
测试一下:b(3) 计算得3*4*7/3=28,和前面的结果一致,完美!
如果x是大整数,这种方法的速度会比前两种快很多,毕竟不用遍历每个数。
内容的提问来源于stack exchange,提问作者locketao
相关产品推荐
相关产品推荐

