名称的动态矢量:增加3到n

时间:2016-12-12 08:36:25

标签: r quantitative-finance

我想将此代码从{x.a,x.b,x.c}扩展到{x.a,...,x.n},其中n定义为length(names)。

names = c("a", "b" , "c")
set.seed(123)
x.nsim = 5000
x.a = runif(x.nsim, min=-1.5, max=1.5)
x.b = runif(x.nsim, min=-1.5, max=1.5)
x.c = 1 - x.a - x.b

for (i in 1:x.nsim) {
  z.vec = c(x.a[i], x.b[i], x.c[i])
  points(z.vec^3, z.vec, cex=0.1)
}

我试图进行此扩展。任何提示?

a<-NULL
for (name in names){
  #x<-paste("x.",name,"[i]", sep="", collapse="")
  a<-cbind(a, paste("x.",name,"[i]", sep="", collapse=""))
  a
}
a
z.vec <- NULL
for (i in 1:x.nsim){
  for (j in 1:length(names)){
    z.vec <- cbind(z.vec, a[j])
    points(z.vec^3, z.vec, cex=0.1)
  }
}

1 个答案:

答案 0 :(得分:0)

就像Gregor评论的那样,你应该在这里使用数据结构。由于我们有许多相同长度和类型(和原点)的向量,因此在这里使用矩阵是很自然的。 让我们设置一些初始参数:

nsim <- 5000
n <- 10

据我所知,我们应该从(n-1)上的统一分布中抽取长度为nsim的{​​{1}}个向量。我们可以通过模拟[-1.5, 1.5]值然后将它们放入带有(n-1)*nsim列的矩阵中,而不是模拟一个接一个矢量,我们可以更快地完成它:

(n-1)

列号m <- matrix(runif((n - 1)*nsim, -1.5, 1.5), ncol = n - 1) n(据我所知)。

1 - [sum of first (n-1) columns]

现在,您可以像m <- cbind(m, 1 - rowSums(m)) 一样获得z.veci