2013-09-08 4 views
1

나는 다음과 같은 코드를 가지고 : 나는 라인 1-4을 repate 싶습니다반복 과정은 만족

1. A=rnorm(100,mean=0, sd=30) 
    2. B1=A+rnorm(100,mean=0,sd=10); B2=A+rnorm(100,mean=0,sd=30); B3=A+rnorm(100,mean=0,sd=50) 
    3. d=data.frame(A, B1,B2,B3) 
    4. c=cor(d)^2 
    5. r=c[2,1]/c[4,1] 

합니다. 조건 1.6 <=r <=3.5이 충족 될 때까지

e.e. r 값이 1.63.5 사이에있는 조건을 만족하도록 A, B1, B2, B3을 생성하고 싶다면 r 값이 해당 범위를 벗어나는 경우 1-4.을 범위 내에서 벗어날 때까지 반복하고 싶습니다.

+0

while() 또는 이와 유사한 것을 사용하려고 생각했거나 if 문을 사용하여 복잡한 for 루프를 사용하면 ifelse()가 이상적이라고 생각하지만 ifelse 내에 너무 많은 명령을 나열하는 방법을 모르겠습니다. – user1723765

답변

0

while이 상황에서 유용 할 수 있습니다.

set.seed(1) 
r<- 0 
while(!(1.6 <=r & r <=3.5)){ 
    r <- r 
    A=rnorm(100,mean=0, sd=30) 
    B1=A+rnorm(100,mean=0,sd=10); B2=A+rnorm(100,mean=0,sd=30); B3=A+rnorm(100,mean=0,sd=50) 
    d=data.frame(A, B1,B2,B3) 
    c=cor(d)^2 
    r=c[2,1]/c[4,1] 
    print(r) 
} 
[1] 4.530864 
[1] 2.600124 

그것은 단지 두번 반복하여 만족하는 값을 조건, 2.600124을 발견하고 최초 값 (4.530864)의 범위에 해당하지 않기 때문에, 다음에, 정지한다.