【发布时间】:2015-12-09 19:10:11
【问题描述】:
我的代码是:
N = 4;
pred_sales_mean <- c(Q1 = 11000, Q2 = 15000, Q3 = 16000, Q4 = 11000)
pred_sales_sd <- c(Q1 = 3000, Q2 = 4000, Q3 = 5000, Q4 = 3000)
pred_sales <- rbind(mean = pred_sales_mean, sd = pred_sales_sd)
sales <- vector()
for (q in paste("Q", 1:4, sep = "")){
sales <- cbind(sales, q = round(rnorm(N, pred_sales['mean',q], pred_sales['sd',q])));
# other code indexing sales[,q]
}
在哪里
> pred_sales
Q1 Q2 Q3 Q4
mean 11000 15000 16000 11000
sd 3000 4000 5000 3000
我想在第一个循环中得到这个:
> sales
Q1
[1,] 8
[2,] 1
[3,] -7
[4,] -4
与此相反:
> sales
q
[1,] 8
[2,] 1
[3,] -7
[4,] -4
分别用于第二个循环:
> sales
Q1 Q2
[1,] 8 -3
[2,] 1 4
[3,] -7 0
[4,] -4 -1
与此相反:
> sales
q q
[1,] 8 -3
[2,] 1 4
[3,] -7 0
[4,] -4 -1
我找到了this simular question,但那里没有给出我正在寻找的解决方案:
【问题讨论】:
-
循环结束后只做
names(sales) <- paste0("Q", 1:4)?尽管在 for 循环中增长对象的整个概念至少在 R 中是根本不正确的。最好你能解释一下你真正想要达到的目标,我们会努力指导更好的方向。例如,您的循环可以仅转换为sales <- matrix(round(rnorm(16, 1, 5)), 4) ; colnames(sales) <- paste0("Q", 1:4)。 -
我编辑了这篇文章,并澄清了我的目标。
-
所以你不能只做
matrix(rnorm(16, unlist(pred_sales[1, ]), unlist(pred_sales[2, ])), 4)吗? (如果pred_sales是data.frame。如果它是matrix,则不需要unlist) -
这似乎有效。谢谢。
-
但是您需要转置结果,因为 Q1 是第一行,而不是第一列,因为矩阵是由列循环填充均值和 sd 的 4 个值,除非您添加 byrow=TRUE。