저는 R에서 4 개의 동전을 m 번 던지는 실험을 시뮬레이션하는 함수를 만들려고합니다. 각 실험은 각 동전에 "숫자"또는 "이미지"의 모양을 기록합니다.
m 개의 실험 결과를 표 형식으로 제시하고 표의 마지막 열에 "표시되는 숫자의 변 수"를 추가합니다.
Sim_Coin<-function(m){
c1<-c()
c2<-c()
cs<-c()
for(i in 1:m)
{
c1<-rbind(d1,sample(0:1,size=1)
c2<-rbind(d2,sample(0:1,size=1)
}
cs<-c1+c2
v<-cbind(c1,c2,cs)
v<-as.data.frame(v)
names(v)<-c("coin1","coin2","sum")
return(v)
}
하지만 실패하고 테이블을 만드는 방법을 모르겠습니다.
R은 벡터화 된 언어이므로 많은 경우 루프의 필요성을 피할 수 있습니다. 따라서 m 번 반복하는 대신 0 또는 1에서 m 개의 샘플을 선택하면 성능이 크게 향상됩니다.
또한 루프 내에서 bind 함수를 사용하여 벡터 또는 데이터 프레임에 점진적으로 추가하는 것은 각 함수 호출로 정보의 새 복사본이 생성되기 때문에 R에서 느립니다.
이 유선형 코드를 살펴보십시오.
Sim_Coin<-function(m){
coin1<-sample(c("head", "tail"), size=m, replace=TRUE)
coin2<-sample(c("head", "tail"), size=m, replace=TRUE)
v<-data.frame(coin1, coin2)
v$sum <- apply(v, 1, function(i){sum(i=="head")})
return(v)
}
Sim_Coin(3)
coin1 coin2 sum
1 tail tail 0
2 head head 2
3 tail head 1
귀하의 질문은 2 개가 아닌 4 개의 동전을 뒤집는 것에 대해 이야기 했으므로 다음은 확장 버전입니다.
Sim_Coin2<-function(m){
n<-4. #number of coins to flip
#create n vectors m long
coins<- lapply(1:n, function(i) {
sample(0:1, size=m, replace=TRUE)
})
#make data frame and rename columns
dfcoin<-as.data.frame(do.call(cbind, coins))
names(dfcoin)<-paste0("Coin", 1:n)
#calculate the number of heads by taking the sum of the rows
dfcoin$sum <- rowSums(dfcoin)
dfcoin
}
Sim_Coin2(10)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다