【问题标题】:Extracting data from a list of vector in the while loop in r [closed]从r中的while循环中的向量列表中提取数据[关闭]
【发布时间】:2020-04-01 10:37:03
【问题描述】:

我发布了关于上一个问题的后续问题。从这段代码中,我想要创建一个包含这种格式数据的向量列表: l3 [[1]] [1] v1 v2 v3 v4

[[2]] [1] w1 w2 w3 w4

[[3]] [1] z1 z2 z3 z4

但我得到的是这样的:似乎它在列表中不断重复元素。 打印(l3)

[[1]] [1] 100.00000 99.45692 98.91680 98.37960 101.04577 100.49701 99.95124 99.06635 98.52834 97.99326 100.14615 99.60228 99.06137

[[2]] [1] 100.00000 99.45692 98.91680 98.37960 101.04577 100.49701 99.95124 99.06635 98.52834 97.99326 100.14615 99.60228 99.06137 [14] 99.99692 99.45386 98.91375 99.15577 98.61728 98.08171 98.73635 98.20013 97.66683 99.45615 98.91603 98.37884

[[3]] [1] 100.00000 99.45692 98.91680 98.37960 101.04577 100.49701 99.95124 99.06635 98.52834 97.99326 100.14615 99.60228 99.06137 [14] 99.99692 99.45386 98.91375 99.15577 98.61728 98.08171 98.73635 98.20013 97.66683 99.45615 98.91603 98.37884 100.71692 [27] 100.16995 99.62595 96.63577 96.11096 95.58901 98.29635 97.76252 97.23160 98.53615 98.00103 97.46881

我不知道如何使它工作。任何人回复或评论总是很感激。

     ml<-list(c(-0.00543076923076923, 0.0104576923076923, -0.00933653846153846, 
                  0.00146153846153846), 
                c(-3.07692307692302e-05, -0.00844230769230769, -0.0126365384615385, 
                  -0.00543846153846154), 
                c(0.00716923076923077, -0.0336423076923077, -0.0170365384615385, 
                 -0.0146384615384615))

       f2<-function(x) x+1
       l2<-lapply(ml,f2)
       l2

       l3 <- vector("list", 3)
       g<-c(100)

       for(i in 1:3){
           for(j in 1:4){
              k=2
              while(k<= 4){

                g<- c(g, (g[k-1]*l2[[i]][j]))
                l3[[i]]<- g 
                k<-k+1
            }

          }

      }

打印(l3)

【问题讨论】:

  • 我不清楚您的代码要完成什么。你能举个例子说明l2l3 应该是什么样子吗?为什么选择1:3 代表i1:4 代表j 并从k=2 开始?我不了解您的代码的意图,因此很难弄清楚您的预期行为与观察到的行为有何不同。
  • l2 只是将 ml 的值转换为计算 ml 中 3 个不同向量的 g 索引。 l3 应该为 ml 中的每个向量内的每个案例生成 g 索引。 g 指数的计算公式为:g(t)=g(t-1)*(1+excess return(t))。超额收益请参阅此处的 ml 列表。每个输出向量(列表)中的第一个值应以 g1=100 开头。 g 是一个指数,用于比较投资组合在 2 资产中不同投资权重的相对回报

标签: r list loops while-loop


【解决方案1】:
ml<-list(c(-0.00543076923076923, 0.0104576923076923, -0.00933653846153846, 
       0.00146153846153846), 
     c(-3.07692307692302e-05, -0.00844230769230769, -0.0126365384615385, 
       -0.00543846153846154), 
     c(0.00716923076923077, -0.0336423076923077, -0.0170365384615385, 
       -0.0146384615384615))

f2<-function(x) x+1
l2<-lapply(ml,f2)
l2

l3 <- vector("list", 3)
g<-c(100)

m<-1
for(i in 1:3){
  for(j in 1:4){
    g[j+1] <- g[j]*l2[[i]][j]
  }
  l3[[i]] <- g

}

这是以下结果:

[[1]]
[1] 100.00000  99.45692 100.49701  99.55872  99.70423

[[2]]
[1] 100.00000  99.99692  99.15272  97.89977  97.36735

[[3]]
[1] 100.00000 100.71692  97.32857  95.67043  94.26996

【讨论】:

  • 感谢您的代码。但是在运行它时,我遇到了以下错误:
  • 有 12 个警告(使用 warnings() 查看)> warnings() 警告消息:1:在 l3[[i]][j]
  • 函数应该计算:g1=100, g(t)= g(t-1) * (1+excess return(t)), t=time (1,...T)对于每个重量。在这里,ml 等于 3 种不同权重的投资。
  • 输出应该是这样的:[[1]] [1] 100.00000 99.456923 100.49701 99.5558719, 99.704228
  • [[2]] [1] 100, ..., ..., ..., ...
猜你喜欢
  • 2015-10-02
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2012-09-16
  • 2021-11-08
  • 1970-01-01
相关资源
最近更新 更多