Ենթադրենք, որ ես ունեմ 20 X 5 մատրիցա, ես կցանկանայի ընտրել մատրիցի ենթաբազմությունները և դրանցով կատարել որոշակի հաշվարկ: Հետագայում ենթադրենք, որ յուրաքանչյուր ենթամատրիցան 7 X 5 է: Ես, իհարկե, կարող էի անել
ncomb <- combn(20, 7)
որն ինձ տալիս է 7 տողերի ինդեքսների բոլոր հնարավոր համակցությունները, և ես կարող եմ դրանք օգտագործել ենթամատրիցներ ստանալու համար: Բայց փոքր, 20 X 5 մատրիցով, արդեն կա 77520 հնարավոր համակցություն: Այսպիսով, ես կուզենայի փոխարենը պատահականորեն ընտրել որոշ համակցություններ, օրինակ՝ դրանցից 5000-ը:
Հնարավորություններից մեկը հետևյալն է.
ncomb <- combn(20, 7)
ncombsub <- ncomb[, sample(77520, 5000)]
Այլ կերպ ասած, ես ստանում եմ բոլոր հնարավոր համակցությունները, իսկ հետո պատահականորեն ընտրում եմ համակցություններից միայն 5000-ը: Բայց ես պատկերացնում եմ, որ խնդրահարույց կլիներ հաշվարկել բոլոր հնարավոր համակցությունները, եթե ես ունենայի ավելի մեծ մատրիցա, ասենք, 100 X 7:
Ուստի ես զարմանում եմ, թե արդյոք կա՞ մի տարբերակ ստանալ համակցությունների ենթաբազմություններ՝ առանց նախապես ձեռք բերելու բոլոր հնարավոր համակցությունները:
unique()
-ը չի աշխատի: Երկրորդ խնդիրն, իմ կարծիքով, այն է, որunique()
-իMARGIN
արգումենտը պետք է սահմանվի2
-ի (կանխադրված՝1
է): Նաևlength(unique(rowsample))
-ի փոխարեն այն պետք է լինիncol(unique(rowsample))
: Քանի որlength
-ը ձեզ տալիս էmatrix
-ում պարունակվող տարրերի ընդհանուր թիվը, այլ ոչ թե սյունակների քանակը (իմ դեպքում յուրաքանչյուր սյունակ նմուշ է, ուստի 5000 սյունակները ինդեքսների 5000 նմուշ են): 18.08.2013replicate
վերադարձնել ցուցակը, ոչ թե մատրիցա): Պարզվում է, որ դա այնքան էլ արդյունավետ չէ, որքան ձեր սկզբնական լուծումը: Եվ, եթե թույլ եք տալիսreplicate
-ին պարզեցնել մատրիցը, դա ավելի դանդաղ է: 18.08.2013combn()
ֆունկցիան և բայթ-կազմեցի այն: Լավ է աշխատում։ Բայց, այնուամենայնիվ, շնորհակալություն այս լուծման համար, կարծում եմ, որ ձեր ռազմավարությունը կարող է օգտակար լինել որոշ այլ բաների համար, որոնց վրա ես աշխատում եմ: 18.08.2013