首页 > 解决方案 > 如何在R中实现一个带有总和的函数?

问题描述

我正在尝试使用 for 循环和 R studio 中的条件定义一个函数。昨天我能够在另一个线程的帮助下设计出这段代码。问题是我想对任何可能的 x 的向量元素 ma 求和,所以它在函数 l 内。这是一个更简单的案例,我试图解决它以适应原始模型。但是,我不知道如何进行。

ma<-rep(0,20)
l <- function(x, ma) {
             for(i in seq_along(ma)) {
                 if(i %% 2 == 1) {
                     ma[i] <- i + x
                  } else {
                     ma[i] <- 0
            }
            }
        return(ma)
       }

我的问题是我想得到 i+x+0+i+x... 对于任何可能的 x 的总和。$$\sum_{i=1}^ki \mathbb{1}_{i mod 2=1 }+x$$我的意思是任何可能的 x的那种函数。

问题:

有人可以向我解释如何在 R 中实现这样的功能吗?

提前致谢!

我将更新原始功能:

Theta_alpha_s<-function(s,alpha,t,Basis){

for (i in seq_along(Basis)){
  if(i%% 2==1) {Basis[i]=s*i^{-alpha-0.5}*sqrt(2)*cos(2*pi*i*t)}
  
  else{Basis[i]=s*i^{-alpha-0.5}*sqrt(2)*sin(2*pi*i*t)}
  
  
}
return(Basis)
}

标签: r

解决方案


如果您不想更改 Basis 中的值,您可以在result将返回的函数(此处)中创建一个新向量:

l = function(s,alpha,t,Basis){
  is.odd = which(Basis %% 2 == 1)
  not.odd = which(Basis %% 2 == 0)
  result = rep(NA, length(Basis))
  result[is.odd] = s*is.odd^{-alpha-0.5}*sqrt(2)*cos(2*pi*is.odd*t)
  result[not.odd] = s*not.odd^{-alpha-0.5}*sqrt(2)*sin(2*pi*not.odd*t)
  #return(result)
  return(c(sum(result[is.odd]), sum(result[not.odd])))
}

推荐阅读