오류 메시지에서 원래의 게시물이 있다는 사실로 인해 d_i$a
고 d_i$b
는 벡터와 1,000 요소 10 은 스칼라. 따라서,R 비교에서 첫 번째 요소 d_i$a
그 첫 번째 요소 d_i$b
10.
오류 메시지를 해결하려면 우리는 비교할 필요가 있는 벡터와 함께 길이 1 스칼라 10. 이 필요한 구조조정 코드를 생성하는 임의의 숫자 중 하나에서 시간입니다. 에서 설명에서 우리는 명확하지 않는지 이 동작한 것은 의도된 것입니다.
나는 단순화 문제 제거하여 10 개의 복제를 설명하는 방법을 만드는 데이터를 프레임으로 임의의 숫자를 때까지가 모두 a
고 b
으로 보다 큰 값은 10.
첫째,우리는 설정을 만들기 위해 씨앗을 대답을 재현성,다음을 초기화 일부 개체입니다. 에 의해 설정 a
고 b
0 리는지 확인 while()
루프에서 실행됩니다 적어도 한 번.
set.seed(950141238) # for reproducibility
results <- list()
a <- 0 # initialize a to a number < 10
b <- 0 # initialize b to a number < 10
i <- 1 # set a counter
데 초기화 a
고 b
이, while()
루프가 TRUE
생 임의의 두 번호,해당 지수 값을 쓰고 그들로 데이터 구조를 results
목록입니다. 에 대한 논리 while()
루프를 나타내는 경우 a
가 작거나 같음 10 b
가 작거나 같음 10,루프 유지 반복. 그것은 정지 경우 모두 a
고 b
은 더 큰 것보다 10.
while(a <= 10 | b <= 10){
a <- rnorm(1,10,1) # generate 1 random number with mean of 10 and sd of 1
b <- rnorm(1,10,1) # ditto
results[[i]] <- data.frame(index = i,a,b)
i <- i + 1 # increment i
}
반복 실행을 중지한 후에 번 반복으로 우리는 볼 수 있습에 의해 인쇄하는 결과 데이터를 프레임 후의 결합을 통해 개별적인 행 do.call()
고 rbind()
.
df <- do.call(rbind,results)
df
...출력:
> df
index a b
1 1 8.682442 8.846653
2 2 9.204682 8.501692
3 3 8.886819 10.488972
4 4 11.264142 8.952981
5 5 9.900112 10.918042
6 6 9.185120 10.625667
7 7 9.620793 10.316724
8 8 11.718397 9.256835
9 9 10.034793 11.634023
>
마지막 행이 프레임 데이터가 보다 큰 값을 모두 10 a
고 b
.
여러 도시를 건의하는 동안 반복
는 과정을 반복 10 회로에서 수행됩니다 우리는 우리가 마무리 작업에서 for()
루고,두 번째 목록 combined_results
결과를 저장하기 위해서 각각의 iteration.
set.seed(950141238) # for reproducibility
combined_results <- list()
for(iteration in 1:10){
results <- list()
a <- 0 # initialize a to a number < 10
b <- 0 # initialize b to a number < 10
i <- 1 # set a counter
while((a < 10) | (b < 10)){
a <- rnorm(1,10,1) # generate 1 random number with mean of 10 and sd of 1
b <- rnorm(1,10,1) # ditto
results[[i]] <- data.frame(iteration,index = i,a,b)
i <- i + 1 # increment i
}
combined_results[[iteration]] <- do.call(rbind,results)
}
df <- do.call(rbind,combined_results)
df[df$iteration < 5,]
...및 출력을 위한 첫 번째는 4 회 반복의 외부 반복:
> df[df$iteration < 5,]
iteration index a b
1 1 1 8.682442 8.846653
2 1 2 9.204682 8.501692
3 1 3 8.886819 10.488972
4 1 4 11.264142 8.952981
5 1 5 9.900112 10.918042
6 1 6 9.185120 10.625667
7 1 7 9.620793 10.316724
8 1 8 11.718397 9.256835
9 1 9 10.034793 11.634023
10 2 1 11.634331 9.746453
11 2 2 9.195410 7.665265
12 2 3 11.323344 8.279968
13 2 4 9.617224 11.792142
14 2 5 9.360307 11.166162
15 2 6 7.963320 11.325801
16 2 7 8.022093 8.568503
17 2 8 10.440788 9.026129
18 2 9 10.841408 10.033346
19 3 1 11.618665 10.179793
20 4 1 10.975061 9.503309
21 4 2 10.209288 12.409656
>
다시는 우리는 마지막 행에서 각 반복(9,18,19,21)보다 큰 값을 모두 10 a
고 b
.
이 방법은 실패를 활용하는 벡터화에서 작업 R 는 것을 의미를 생성하는 대신 1,000 임의의 숫자를 호출할 때 rnorm()
코드 기반 while()
생성일 임의의 숫자를 통화당을 rnorm()
. 이 rnorm()
리소스를 많이 사용하는 기능 코드를 최소화하는 횟수 rnorm()
실행하는 것은 바람직하다.