2012-06-22 6 views
4

숙제가 아닙니다.. R에서 동전 던지기 시뮬레이션을 설정하는 데 관심이 있습니다. 일주일 동안 시뮬레이션을 실행하고 싶습니다. R에 일주일과 같은 기간 동안 시뮬레이션을 시작하고 중지 할 수있는 함수가 있습니까? 모두 잘되면, 나는 시뮬레이션 기간의 길이를 늘리고 싶을지도 모른다. 예를 들어동전 던지기를 일주일에 시뮬레이션 하시겠습니까?

:

x <- rbinom(10, 1, 1/2) 

그래서 명확하게, 대신 위의 코드 10, 어떻게 내가 시험 세트 수에 비해 일주일에 일주일 동안 시험 (숫자가는 시뮬레이션을 보관하지)? 감사.

+5

왜이 기능을 원하십니까? 확실히 결과는 컴퓨터의 컴퓨터 속도에 달려 있습니까? – Andrie

+0

왜 그렇게 중요한가요?가능한지 알고 싶습니다. 평범한 요청이라고 생각합니다. 이것은 제가하고 싶은 일을하는 데있어 부분적으로 도움이 될 것입니다. –

+1

당신이 나를 도와주기를 원한다면 그렇게합니다. – Andrie

답변

11

다음 코드는 3 초 동안 계속 실행 한 다음 총계를 중지하고 인쇄합니다.

x <- Sys.time() 
duration <- 3 # number of seconds 
heads <- 0 
tails <- 0 

while(Sys.time() <= x + duration){ 
    s <- sample(0:1, 1) 
    if(s == 1) heads <- heads+1 else tails <- tails+1 
    cat(sample(0:1, 1)) 
} 
cat("heads: ", heads) 
cat("tails: ", tails) 

결과 : 경고

001100111000011010000010110111111001011110100110001101101010 ... 
heads: 12713 
tails: 12836 

참고 : 내 컴퓨터의 속도에서

, 난 당신이 전에 부동 소수점 오류 내기 주의 끝. 다시 말해, 정수, double, float 또는 사용중인 모든 값으로 저장할 수있는 최대 값을 얻을 수 있으며 코드가 충돌합니다.

그래서 오류 검사 또는 롤오버 메커니즘을 구축하여이를 방지해야합니다. 정상적으로 부동 소수점 과부하

x <- 1e300 
while(is.finite(x)){ 
    x <- x+x 
    cat(x, "\n") 
} 

R 거래를하고 Inf을 반환 무슨 일이 일어날의 가속 그림에 대한


다음을 시도하십시오.

그래서 시뮬레이션에 있던 데이터가 손실됩니다. 무한대를 합리적으로 분석 할 수는 없습니다.

시뮬레이션을 디자인 할 때는이 점을 명심하십시오. 이제 일주일보다 작은 동안

+0

감사합니다. @ 앤드리. 그것은 내가 겪은 것처럼 보인다. 나는 그것이 이상한 요청이라는 것을 알고 있지만 R의 이러한 측면을 배우는 것을 좋아합니다. 단지 궁금해서. 메모리 부족 등의 다른 질문을할까요, 아니면 아이디어가 있습니까? 내가 이것을 일주일 간 운영한다면, 분석 할 수 있을까요? –

+3

이것은 메모리 관리가 아닙니다. 컴퓨터가 값을 저장하는 방법에 관한 것입니다. 모든 프로그래머 매뉴얼에서 정수 및 부동 소수점 값에 대해 읽습니다. http://en.wikipedia.org/wiki/Floating_point에서 확인하십시오. 내 코드에는 두 가지 값만 저장됩니다. 이것은 결코 기억을 잃지 않을 것입니다. 하지만 여전히 부동 소수점 오류 (또는 그에 상응하는 R이 무엇이든지)를 얻을 수 있습니다. – Andrie

+0

시뮬레이션을 수행하는 시스템이 테라 바이트 저장소에 액세스 할 수있는 네트워크에 있습니다. 나는 그것이 시스템을 압도하지 않도록 네트워크 주변의 데이터를 이동시키는 경우 일 뿐이라고 가정합니다. 내 실제 프로젝트는 접선으로 만 관련이 있지만 모든 아이디어가 요리 냄비에 들어갑니다. –

3

나중에 스탬프 당신은 앤드류 REDD에 의해 상당히 새로운 패키지 harvestr에 관심이있을 수 x rbinmo(1,1,1/2)

R> week_later <- strptime("2012-06-22 16:45:00", "%Y-%m-%d %H:%M:%S") 
R> x <- rbinom(1, 1, 1/2) // init x 
R> while(as.numeric(Sys.time()) < as.numeric(week_later)){ 
R> x <- append(x, rbinom(1, 1, 1/2)) 
R> } 
+1

예,하지만 일주일이 지나면 반드시 컴퓨터의 메모리를 초과합니다. OP는 완전한 대답을 얻기 위해 시뮬레이션중인 내용에 대한 구체적인 정보를 제공해야합니다. – joran

+0

그래도 2 가지 질문 인 것 같습니다. 일주일 동안 뛰는 방법? 이 계산을 1 주일 동안 실행하면서 메모리 문제를 처리하는 방법은 무엇입니까?두 가지 질문을 결합하면 저주되고, 그렇지 않으면 저주받을 수 있습니다. –

+4

각 값을 파일에 추가하기 만하면됩니다. 유일한 요구 사항은 1 주일 동안 기계를 작동 상태로 유지하는 것이기 때문에 ... – Roland

0

에 추가합니다. 작업을 조각으로 나눕니다. 조각은 병렬로 실행될 수 있습니다. 귀하의 질문에 적용되는 패키지 부분은 이미 처리 된 조각의 결과를 캐시에 저장하여 작업을 중개하고 다시 시작하면 완료된 조각을 다시 실행하지 않고 계속 작동하도록합니다. 완료되지 않은 부분 (부분적으로 중개 된 부분은 해당 부분의 시작 부분부터 시작됩니다).

이렇게하면 요청에 따라 시뮬레이션을 시작하고 중지 할 수 있습니다.

관련 문제