我想将此代码从{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)
}
}
答案 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.vec
号i
。