2015-12-09 4 views
1

Мой код:R: динамическое имя столбца в цикл с cbind на каждом шаге

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 Двойники вопрос, но решение, которое я ищу не дано здесь:

+0

Просто выполните имена (продажи) <- paste0 («Q», 1: 4) 'после окончания цикла? Хотя вся концепция растущих объектов в цикле for в корне неверна, когда дело доходит до R по крайней мере. Лучше вы объясните, чего вы на самом деле пытаетесь достичь, и мы постараемся вести в лучшем направлении. Например, цикл может быть преобразован только в 'sales <- matrix (round (rnorm (16, 1, 5)), 4); colnames (sales) <- paste0 ("Q", 1: 4) '. –

+0

Я отредактировал сообщение с некоторыми clarificaiton о том, что я за. –

+0

Так что вы не можете просто сделать 'matrix (rnorm (16, unlist (pred_sales [1,]), unlist (pred_sales [2,])), 4)'? (в случае, если 'pred_sales' является' data.frame'. Вам не нужно 'unlist', если его' matrix') –

ответ

1

Вы решили использовать цикл for?

> result <- sapply(1:N, function(x) round(rnorm(4, 
+  pred_sales["mean", x], pred_sales["sd", x]))) 
> colnames(result) <- paste0("Q", 1:4) 
> result 
     Q1 Q2 Q3 Q4 
[1,] 13209 17186 16570 8510 
[2,] 15586 9408 16366 7209 
[3,] 10443 19492 10887 9231 
[4,] 13215 11634 20564 8990 
+0

Вы также настроены использовать цикл? –

+0

Цикл, но не цикл for. – dcarlson

+0

Вам вообще не нужна петля, см. Мой комментарий. –

 Смежные вопросы

  • Нет связанных вопросов^_^