- 질문 게시판입니다.
Date 22/12/07 17:13:19
Name   소요
Subject   R 코드 효율화
임의화 검정 때문에 데이터가 배열될 수 있는 각 경우의 수에 해당하는 데이터들의 전체 집합을 구하려고 합니다. 완전 랜덤은 아니고 제약 조건이 있어서, 따로 R로 코드를 짜고 있어요.

예를 들어

학생 A가 실험 6, 7
학생 B가 실험 4, 6

에 지원했다고 하면

가능한 조합 1: 6, 4
가능한 조합 2: 6, 6
가능한 조합 3: 7, 4
가능한 조합 4: 7, 6

으로 학생을 실험에 배정하는(학생은 실험 1개에 무조건 참여, 1개 실험에는 여러 학생이 참여 가능) 경우의 모든 조합을 데이터 프레임으로 만드려고 해요.

무식하게 다중 for문을 굴려봤는데

for (a in c(6, 7)){
  for (b in c(4, 5, 6)){
    for (c in c(4, 6)){
      for (d in c(1, 3)){
        [합치는 식]
   }
  }
}
}

for문을 17개를 겹치니 속도가 너무 느립니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 경우의 수는 44만개 정도 되는데, 2시간 굴려도 13만개에서 허덕이네요.

대개 벡터 계산이 속도가 빠른 편이라 관련 함수 개발된 게 있나 찾아보려고 해도, 위에 다중 for문으로 구현하려고 하는 계산의 명칭을 모르니 검색 자체를 못하고 있네요.

제가 구현하고 싶은 다중 for문의 수학적 명칭 혹은 코드를 효율화 할 수 있을 다른 방법이 있을까요?

이 글 올리고 일단 자러 가야하기 때문에 답변 혹은 감사인사는 몇 시간 뒤에 드릴 수 있을 것 같습니다 ㅠ



0


노루야캐요
코드 자체는 BFS나 DFS를 사용해서 최적화할 수 있을 것 같은데, 결국 경우의 수가 44만개라면 결국 44만번 계산을 해야 하는 건 똑같기 때문에 느린 건 마찬가지일 것 같네요.
2
감사합니다! 이건 또 새로운 영역이네요 https://sg-moomin.tistory.com/entry/BFSDFS-%EA%B9%8A%EC%9D%B4%EC%9A%B0%EC%84%A0%EB%84%88%EB%B9%84%EC%9A%B0%EC%84%A0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EB%A6%AC-%EC%84%B8%EA%B8%B0%EB%AC%B4%EB%AF%BC

데이터 테이블 만든 이후에 조건에 따라 향후 다시 골라낸다면 그 때 적용해 볼 수 있을 것 같아요. for문 돌려둔 컴 작업 끝나면 BFS/DFS를 한 번 파봐야겠네요~~
라임오렌지나무
R은 for 문이 워낙 느립니다.

1. Rcpp에 boost 라이브러리를 쓰면 속도는 가장 빠르긴 할텐데 이건 무늬만 R이고 C++ 코딩을 하는 거라 어렵지요.

2. 쓸 수 있다면 apply 함수를 쓰는 게 더 빠릅니다.

3. 유사한 문제에서 R way는 44만 개 크기 빈 데이터프레임을 만든 다음에 column by column 으로 원하는 값을 할당하는 방식이긴 합니다. 그런데 주신 설명으론 말씀하시는 문제에 적용 가능한지 잘 모르겠어요 ㅠㅠ
2
감사합니다! fop문 사용 < apply 사용 < 벡터 계산 식으로 속도가 빠르다고 하더라고요. 아래 찾아낸 tidyr 패키지의 crossing()이 어떤 계산에 해당할지는 모르겠지만 일단 도전을,,, https://statkim.github.io/rcpp-tutorial/ Rcpp도 공부를 해야겠네요 8ㅅ8 역시 세상은 넒다...
R은 안 써봤지만 대충 expand.grid() 같은 너낌이 듭니다. 메모리만 충분하면 위 함수로 모든 학생들의 지원 목록에 대한 카테시안 곱을 만들고 constraint로 한번에 필터링 하는 것도…?

요런 느낌인데.. 참고만 하십시오. https://stackoverflow.com/questions/17798363/expand-grid-when-one-variable-is-really-two-columns
2
감사합니다! 찾아보니 개념적으로는 카데시안 곱이 제가 원하는 걸 정확하게 표현하네요. https://statisticsglobe.com/cartesian-product-r 를 참고해서 시도해 볼 수 있을 것 같아요. 다른 컴에 돌려봐야지 희희
1
와 컴퓨팅 파워가 다른 컴이기는 한데, crossing() 쓰니까 10초만에 해결되네요 ㅠㅠㅠㅠㅠ
4
덜커덩
대충 벡터화해서 전치행렬 얻고 tile/repeat 좀 써서 옆으로 컬럼을 붙여나가는 방식으로 직접 n개 배열의 카테시안 곱을 얻는 것도 재미있을 수 있읍니다. (아님)
2
후덜덜 그건 또 다른 레벨의 연습이 될 것 같습니다 ㅋㅋㅋㅋㅋ
벡터는 신이야!
복잡도 공부의 중요성을 다시금 느끼고 갑미다
일반적으로는 스몰 데이터를 다뤄서 효율성은 걱정을 안 하는데, 방법론 연구에 가까운 분야를 해보려다보니 시뮬레이션을 해야 해서 효율성을 따지게 되네요 ㅋㅋㅋ
아~ 완벽히 이해했어! (아님)
여우아빠
고수만 쓴다는 R... 저는 SPSS도 버거워서..
목록
번호 제목 이름 날짜 조회 추천
공지 질문 게시판 이용 규정 11 토비 15/06/19 24529 4
16689 의료/건강하소연 겸 질문입니다. 편찮으신 어머니 문제 8 + [익명] 25/04/20 483 0
16688 기타거울로 반사된 빛으로 곰팡이를 퇴치할 수 있나요? 1 2025 25/04/20 313 0
16687 기타이런 영상은 어떤 장비로 찍은 것일까요? 6 홍당무 25/04/19 443 0
16686 게임급 슈퍼패미컴 미니 클래식이 끌리는데 2 퍼그 25/04/19 262 0
16684 진로IB 업무 중 진로 고민 8 움직여 25/04/19 499 0
16683 진로아이 진로에 관한 고민 7 단비아빠 25/04/18 395 0
16682 문화/예술관광으로 중국 도시를 택할 메리트가 있을까요 11 + 열한시육분 25/04/18 489 0
16681 기타강력접착된거 떼는방법이 있을까요..? 14 even&odds 25/04/18 370 0
16680 기타차량 폐차 관련 질문입니다. 26 메존일각 25/04/17 529 0
16679 법률부동산 복비 관련 문의드립니다. 6 [익명] 25/04/17 326 0
16678 IT/컴퓨터24인치 듀얼 모니터 vs 27인치 울트라와이드모니터1대 9 Picard 25/04/17 336 0
16677 체육/스포츠첫 런닝 관련 초보 질문 사항 4 아재 25/04/16 324 0
16676 기타차단기 문제 7 왕킹멍 25/04/15 367 0
16675 체육/스포츠초 6 여아 극기체험용 등산가방추천부탁드립니다. 6 FTHR컨설팅 25/04/15 346 0
16674 의료/건강왼쪽 오른쪽 시력차이가 엄청 크네요 5 OneV 25/04/15 421 0
16672 기타소형차 중고 가격및 유지비 질문드립니다 8 셀레네 25/04/14 375 0
16671 IT/컴퓨터중국산 로봇청소기 사생활 위험 어떻게 보시나요 8 당근매니아 25/04/14 519 0
16670 가정/육아매트리스 추천을 부탁드립니다 :) 10 Broccoli 25/04/14 319 0
16669 법률양도세 계산 관련하여 질문 있습니다. 8 [익명] 25/04/14 349 0
16668 기타서울 남쪽에 아버지 모시고 식사할 곳 찾는 중입니다. 4 퍼그 25/04/14 323 0
16667 기타인터넷 질문입니다 5 김치찌개 25/04/14 240 0
16666 의료/건강건강보험 3자행위 신고 질문입니다. 2 [익명] 25/04/13 402 0
16665 기타1500 이하로 살 수 있는 중고 suv 추천해주십시오 11 개백정 25/04/13 684 0
16664 IT/컴퓨터컴퓨터 정리 프로그램 추천부탁드립니다. 홍차넷 선생님들!! 13 Mandarin 25/04/11 553 0
목록

+ : 최근 2시간내에 달린 댓글
+ : 최근 4시간내에 달린 댓글

댓글
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기