2013-06-28 2 views
2

V (d) = V (m) * (1 + 노이즈)의 월별 값에서 일일 값을 시뮬레이트하려면 잡음이 평균 0과 표준 편차 0.18로 정상적으로 분포 됨)두 개의 루프에 대한 루프

나는이라고 하루 였어요 루프 두 가지를 사용하는 다른 12x1 매트릭스의 각 달에 12x1 매트릭스라는 wind.m과 일에 매달 값 :

이 코드의 결과는 31의 12 개 세트를 시뮬레이션

for (i in (1:12)) { 
    for (j in (1:12)){ 
    A<-wind.m[i,]*(1+rnorm(day[j,],0,0.18)) 
    } 
    print(A) 
} 
(2 월 28 일, 4 월, 6 월에는 30 일 등이 있습니다.) 제 코드를 수정하는 방법을 모르겠습니다.

다음 데이터가 사용되지 않습니다 :

> wind.m 
     [,1] 
[1,] 2.78 
[2,] 2.93 
[3,] 3.09 
[4,] 3.11 
[5,] 3.44 
[6,] 3.44 
[7,] 3.71 
[8,] 3.86 
[9,] 4.05 
[10,] 4.08 
[11,] 4.22 
[12,] 4.30 
> day 
     [,1] 
[1,] 31 
[2,] 28 
[3,] 31 
[4,] 30 
[5,] 31 
[6,] 30 
[7,] 31 
[8,] 31 
[9,] 30 
[10,] 31 
[11,] 30 
[12,] 31 
+0

31 블록을 생성하는 방법을 알지 못합니다. 12 일간의 블록을 수행하는 것처럼 보입니다. –

+0

이것은 'day'와 'wind.m'데이터가 없으면 거의 이해가 안됩니다. 31에서 무엇을 얻으 시죠? '낮'에 있니? – Justin

+0

"및 각 달 12x1 행렬의 요일을 일이라고합니다." 당신의 일 매트릭스가 12x31이되어서는 안됩니까? –

답변

2

의 데이터를 사용.

설정 :

wind.m <- c(2.78, 2.93, 3.09, 3.11, 3.44, 3.44, 
      3.71, 3.86, 4.05, 4.08, 4.22, 4.30) 
day <- c(31, 28, 31, 30, 31, 30, 
     31, 31, 30, 31, 30, 31) 

그리고 년간 매일 값으로 월별 수단을 확장 rep를 사용합니다.

day_means <- rep(wind.m, times = day) 

그런 다음 시뮬레이션 된 값을 생성하십시오.

A <- rnorm(length(day_means), mean = day_means , sd=0.18) 

A는 시뮬레이션 된 데이터입니다.

+0

대단히 감사합니다! – user2472273

+0

+1 R 벡터화 사용에 좋은 – dickoa

+0

감사합니다. – Kikapp

1

중첩 루프에 대한 필요. 이 경우에는 mapply을 사용할 수 있다고 생각합니다.

set.seed(42) 
df <- data.frame(month = month.abb, 
       numb_day = c(31, 28, 31, 30, 31, 30, 31, 
       31, 30, 31, 30 , 31), 
       wind_m = rnorm(12, mean = 20, sd = 5)) 

addNoise <- function(n, x) x * (1 + rnorm(n, 0, 0.18)) 

wind_d <- mapply(addNoise, df$numb_day, df$wind_m) 
str(wind_d) 
## List of 12 
## $ : num [1:31] 21.5 27.5 35.5 38.6 21.6 ... 
## $ : num [1:28] 21.7 11.3 15 16.2 12 ... 
## $ : num [1:31] 13.7 20.8 17.2 27.5 27.1 ... 
## $ : num [1:30] 26.3 14.2 20.2 23.1 17.1 ... 
## $ : num [1:31] 17.3 22.5 22 26.1 25.6 ... 
## $ : num [1:30] 20.8 12.8 13.1 15.5 18.3 ... 
## $ : num [1:31] 32.1 19.7 30.5 28 32.4 ... 
## $ : num [1:31] 19.5 19.5 20.1 21.6 19.1 ... 
## $ : num [1:30] 35.5 34.1 26.7 32.2 25.3 ... 
## $ : num [1:31] 22.7 19.5 15.8 21.7 24.3 ... 
## $ : num [1:30] 20.2 32.2 23.7 32.3 24.3 ... 
## $ : num [1:31] 41.2 31.1 28.4 35.7 28.7 ... 

편집 : 당신은 밖으로 루프를두고 문제를 해결하고 3 단계에서 R 벡터화에 대해 조금 배울 수있는 OP의

set.seed(123) 
wind_d <- mapply(addNoise, day, wind.m) 
## List of 12 
## $ : num [1:31] 2.5 2.66 3.56 2.82 2.84 ... 
## $ : num [1:28] 2.77 3.4 3.39 3.36 3.29 ... 
## $ : num [1:31] 3.21 3.3 2.81 2.9 2.52 ... 
## $ : num [1:30] 3.67 3.42 3.24 2.76 3.87 ... 
## $ : num [1:31] 3.51 2.85 3.14 3.28 4.58 ... 
## $ : num [1:30] 3.92 3.65 2.82 3.37 3.27 ... 
## $ : num [1:31] 4.55 3.48 3.13 3.55 3.58 ... 
## $ : num [1:31] 4.72 3.5 3.17 5.02 3.55 ... 
## $ : num [1:30] 3.22 3.92 5.44 3.98 3.06 ... 
## $ : num [1:31] 3.06 4.7 3.75 4.21 4.13 ... 
## $ : num [1:30] 3.89 4.47 2.69 4.38 5.16 ... 
## $ : num [1:31] 4.59 2.71 3.24 4.14 4.97 ... 
+0

대단히 감사합니다! – user2472273

+0

어쨌든 결과를 365x1 벡터에 저장할 수 있습니까? – user2472273

+0

@ user2472273 예, 가능합니다. 그냥 'unlist (wind_d)'할 – dickoa

관련 문제