首页 > 解决方案 > 使用求和运算符将公式转换为 R

问题描述

编辑:

我想以最简单的形式了解:

如何使用 for 循环获得以下 cumsum 数据集:

1 = 1
1+2 = 3
1+2+3 = 6
1+2+3+4= 10
1+2+3+4+5 = 15

当我尝试这段代码时;我没有得到我想要的结果

test <- c(0,0,0,0,0)
for (i in 1:5) {test[i] <- sum(i)}

 test
 [1]  1  2  3  4  5  

实际问题:

我想将以下公式转换为 R:

在此处输入图像描述

我尝试的是以下内容,但不幸的是它给了我错误的值:

P <- rnorm(20,100,6)

exp <- function( theta){

for (t in (3:20)){
for (k in (1:(t-1))){

    X[t] = (1-theta) * sum( theta^(k-1)*(P[t-k] - P[t-k-1])) + theta^(t-1)}
}

我确定我用错了求和运算符,但我的大脑完全被阻塞了,我不知道如何在这里正确使用它。

我会很感激你的帮助。

标签: rsumformula

解决方案


您可以创建您的函数,exp以便它依赖于theta然后它。试用:tVectorize

set.seed(1)
P <- rnorm(20,100,6)
exp <- function(theta, t){
        for (k in 1:(t-1)) {
                X = (1-theta) * sum(theta^(k-1)*(P[t-k] - P[t-k-1])) + theta^(t-1)
                }
        return(X)
}  
exp <- Vectorize(exp)
exp(0.6, 3:20) # setting theta to 0.6 for instance
# output
 [1] 3.600000e-01 2.160000e-01 1.296000e-01
 [4] 7.776000e-02 4.665600e-02 2.799360e-02
 [7] 1.679616e-02 1.007770e-02 6.046618e-03
[10] 3.627971e-03 2.176782e-03 1.306069e-03
[13] 7.836416e-04 4.701850e-04 2.821110e-04
[16] 1.692666e-04 1.015600e-04 6.093597e-05

您还可以for对不同的 theta 值使用循环:

my.list <- list()
for (i in seq(0.1, 0.9, 0.1)) {
        val = exp(i, 3:20)
        my.list[[paste0("theta", i)]] <- val
}
str(my.list)
# my.list
List of 9
 $ theta0.1: num [1:18] 1e-02 1e-03 1e-04 1e-05 1e-06 ...
 $ theta0.2: num [1:18] 4.0e-02 8.0e-03 1.6e-03 3.2e-04 6.4e-05 ...
 $ theta0.3: num [1:18] 0.09 0.027 0.0081 0.00243 0.000729 ...
 $ theta0.4: num [1:18] 0.16 0.064 0.0256 0.0102 0.0041 ...
 $ theta0.5: num [1:18] 0.25 0.125 0.0625 0.0312 0.0156 ...
 $ theta0.6: num [1:18] 0.36 0.216 0.1296 0.0778 0.0467 ...
 $ theta0.7: num [1:18] 0.49 0.343 0.24 0.168 0.118 ...
 $ theta0.8: num [1:18] 0.64 0.512 0.41 0.328 0.262 ...
 $ theta0.9: num [1:18] 0.81 0.729 0.656 0.59 0.531 ...

推荐阅读