각 코드 블록 전에 또는 프로젝트 당 한 번 시드를 설정 하시겠습니까?


13

결과를 재현 할 수 있도록 랜덤 시드를 설정하는 것이 표준 조언입니다. 의사 난수 그려로 씨가 고급 때문에 경우, 결과는 변경 될 수 있는 코드 조각이 추가 번호를 그립니다.

언뜻보기에 버전 제어는 메모 나 종이에 결과를 적어 놓았을 때 최소한 버전으로 돌아가서 버전을 재현 할 수 있기 때문에 이것에 대한 해결책으로 보입니다. 그러나 문제를 해결하는 데에는 한 번의 작업 만 필요하므로 R을 업데이트하면 결과도 변경 될 수 있습니다.

나는 이것이 드문 경우에만 문제가 될 수 있음을 알고 있지만 여기에 모범 사례가 있는지 궁금합니다. 이것은 내 일에서 어려움을 겪고있는 것입니다.

답변:


8

코드를 실행하는 방법 또는 임의의 방식으로 임의의 숫자를 그리는 점에서 다소 확률이 높은 코드가 있는지 여부에 따라 다릅니다. (이 예제는 철저한 채식주의 패키지 의 순열 테스트로 , 결과가 명시된 유형 I 오류와 다른 유형 II 오류율을 나타내는 지 여부를 알 수있을만큼 충분한 데이터를 모을 때까지 순열을 계속합니다. 무승부에 영향을 미치지 않아야합니다 ...

최종 스크립트가 배치 작업 또는 전체로만 실행되고 의사 난수 생성기에서 확률 적 추첨이없는 경우 스크립트 상단에 시드를 설정하고 전체를 실행하는 것이 안전합니다 .

코드를 단계별로 실행하려면 아마도 블록을 다시 실행 set.seed()하고 의사 난수 생성기에서 가져올 각 함수 호출 전에 호출 이 필요합니다 .

내 과학 논문의 경우, 나는 각 코드 청크 전에 정기적으로 슈퍼 방어력을 발휘하고 시드를 설정합니다. 이를 통해 나중에 스크립트를 업데이트하여 언제든지 기존 스크립트에 삽입해야 할 수 있습니다. 검토 자 또는 공동 작성자의 의견에 답변하십시오.

결과가 특정 pseduo-random 값 세트에 따라 달라지지 않기 때문에 문제는 보고서 또는 논문에 명시된 정확한 값을 재현 할 수 있습니다. 매우 방어 적이며 각 코드 청크에 시드를 설정하더라도 정확한 설치 --- R 버전 및 패키지 버전을 다시 만들어야하므로 세부 정보를 기록해야합니다. 추가 안전을 위해 특정 프로젝트 / 종이에 대해 이전 R 버전 및 패키지를 보관해야합니다. 실제로 많은 사람들이 이것을합니다.


+1. 마지막 단락을 다시 : 모든 정크 파일을 저장할 필요는 없으며 전체 설치를 다시 만들 필요가 없습니다. 어떤 RNG를 사용하는지에 대해 구체적이고 기본값을 수락하지 않으면 (1) 해당 RNG의 소스 코드 (일반적으로 짧음)와 (2) 각각의 중요한 시점에서 RNG의 상태가 필요합니다. . 대부분의 R작업에서이 상태는에서 찾을 수 있습니다 .Random.seed. 가장 큰 관심사 R는 일부 루틴이이를 회피 할 수 있다는 것 set.seed입니다. 경우에 따라 완전히 무시할 수도 있습니다.
whuber

2
@ whuber 더 일반적으로 생각했습니다. 문제가 정확한 결과 집합을 재현하는 경우 R 버전과 사용 된 모든 패키지 버전이 필요할 것입니다. 오순절; R 3.0.0은 중요하지는 않지만 너무 많은 정밀도를 가정하는 모든 패키지 검사 테스트를 중단하기에 충분했던 값을보고하는 정밀도를 변경했습니다. 또한 패키지가 정기적으로 업데이트되고 상황이 변경됩니다.
개빈 심슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.