2015-01-08 1 views
-1

내 문제가 이상합니다. 내 대학에서 배구 팀 일정을 잡으려고하고 있는데 R을 통해 결정하기를 원합니다. 팀이 21 개 있고 매주 16 명이 뛰고 있습니다. 일부 팀의 게임 수가 다른 경우 중요하지 않습니다. 평균 결과를 살펴보기 때문입니다.함수를 다시 시작하려면 R을 주문하십시오.

play<-function(group){ for (i in 1:1){ playing<-sample(group,16) in1<-sort(playing) in2<-sample(playing) if(sum(in1==in2)==0){ games<-rbind(in1,in2) } if(sum(in1==in2)!=0){ i<-i-1 } } return(games) }

내 문제는 무엇인가 :

그래서 난 아주 간단한 함수를 만들어? R이 나를 도와주지 않아! 두 벡터 in1과 in2가 적어도 하나의 위치에서 서로 같으면 함수를 다시 실행하지 않습니다. 너 왜 그런 생각있어? 내가 어떻게이 문제를 해결할 수 있을지 생각해?

이번 주에 뛰고있는 팀입니다. (단지 16 명이 플레이) 그룹은 팀의 이름을 가진 벡터가 될 것입니다 ... (예를 들어 A, B, C, D를 사용할 수 있습니다) 샘플 (재생 중)은 선택한 16 개의 벡터를 무작위로 추출합니다 팀. in1과 in2가 어떤 공간에서도 일치하지 않으면 재생할 수 있습니다. 그리고 이것을 점검하면서 문제가 발생합니다. :/

아무도 도와 줄 수 있습니까? 감사합니다

+3

'for (i in 1 : 1)'은 한 번만 실행됩니다. 'while '을 원할 수도 있지만 전반적으로 더 좋은 방법이있을 것이라고 확신합니다. – thelatemail

+0

16 개의 팀이 각각 2 개의 게임을하는 16 개의 게임 일정을 계획하고 있습니까? 한 게임에서 팀은 첫 번째 열 (집에서 놀고있는 것)에 나타나고 다른 한 열에서는 두 번째 (나타나지 않습니까?)에 나타납니다. 따라서 순열의 n 번째 원소가 n이 아닌 순열 (1:16)을 생성하고 싶습니까? – Spacedman

답변

0

귀하의 기능은 일반적으로 매우 복잡합니다. 먼저 16 개 팀을 샘플로 샘플링 한 다음 서로 플레이하도록하십시오. 이 시도 :

play <- function(group){ 
    playing <- sample(group, 16) 
    # if you have 16 teams, you really just have 8 games... 
    games <- rbind(playing[1:8], 
       playing[9:16]) 
    return(games) 
} 
play(LETTERS[1:21]) 
0

1의 순열 : 그래서 http://mathworld.wolfram.com/Derangement.html

는 16 개 팀이 있고, 준비하려는 경우 : n은 순열의 어느 것도 같은 장소에없는되도록 "교란"라고합니다 각 팀이 집에서 한 번 멀리 뛰고 스스로 뛰지 않는 16 개의 게임은 혼란을 계산해야합니다.

그래서 rdocumentation.org에서 검색하면 PerMallow 패키지에 기능이 있습니다.

install.packages("PerMallow") 
require(PerMallow) 

그런 다음, (여기 크기 6) 따라서 하나의 교란을 생성 할 수있는 하나의 행 매트릭스 : E로 명명 된 다섯 개 팀 그래서

r.derangement(1,6) 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 4 1 5 3 6 2 

:

> teams = LETTERS[1:5] 
> teams 
[1] "A" "B" "C" "D" "E" 

당신은 1 행 행렬의 첫 번째 행에서 얻은 derangement에 의해 주문 된 팀 이름으로 팀 이름을 묶습니다 :

> cbind(teams, teams[r.derangement(1,5)[1,]]) 
    teams  
[1,] "A" "E" 
[2,] "B" "C" 
[3,] "C" "A" 
[4,] "D" "B" 
[5,] "E" "D" 
관련 문제