[問題] combn取法(一定要包含1)

作者: getsimple (getsimple)   2020-10-16 02:22:24
[問題類型]:
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
[軟體熟悉度]:
新手(沒寫過程式,R 是我的第一次)
[問題敘述]:
我目前想要取data的columns
然後做所有的組合
但一定都要包含第一個column
目前code如下:
N <- 5
Model = list()
C <- 1
for(i in 1:N){
i_Combn <- combn(N, i)
for(j in 1:choose(N, i)){
Model[[C]] <- i_Combn[, j]
C <- C + 1
}
}
Model
結果為:
https://i.imgur.com/X8VspIL.jpg
但我今天想要的結果一定要包含1
也就是我想要得到的結果是:
1
1 2
1 3
1 4
1 5
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
1 2 3 4
1 2 3 5
1 2 4 5
1 3 4 5
1 2 3 4 5
想了很久都弄不出來
拜託大家幫幫我
非常感謝
[關鍵字]:
Combn、排列組合
作者: Gjerry   2020-10-16 02:35:00
你可以想像每一個位置有 True 和 False 兩種可能1 可以看成 T F F F F,1, 2 可以看成 T T F F F問題就變成如何產生所以的 T/F 組合,可以以此試試看
作者: locka (locka)   2020-10-16 09:02:00
作者: andrew43 (討厭有好心推文後刪文者)   2020-10-16 10:25:00
硬上就是在內層for中再包一個if (1 %in% i_Combn[, j])
作者: khaos (出來混的...)   2020-10-16 11:32:00
為什麼不把1以外的column做完全組合後,再跟1 column結合?
作者: rebe212296 (綠豆冰)   2020-10-16 12:55:00
用expand.grid即可
作者: getsimple (getsimple)   2020-10-16 13:20:00
G大,這個我有用過,但我底下要做迭代運算,如果用取資料的方式,會更方便~謝謝你提供的想法l大,感謝你!!我想要的就是這樣~a大跟r大,我再試試看,感恩~k大,因為這樣會有重複,譬如說1 3 5如果跟1結合,會變成 1 1 3 5,但我只要1 3 5
作者: locka (locka)   2020-10-16 15:30:00
我想樓上k大的意思應該是像這樣 https://i.imgur.com/lTZra1r.jpeghttps://i.imgur.com/lTZra1r.jpeg再把1黏到每個元素的第一個阿捏,不過list裡面的matrix我不是很會處理這種結構(苦手),希望其他高手可以補充>"<
作者: getsimple (getsimple)   2020-10-16 17:09:00
了解,感謝教學,其實我也不太會處理這種哈哈,遇到我都寫迴圈...不過就會變成一堆迴圈,因為我目前就是這樣...做這個組合的目的只是要取list裡面的data,我的用途是取位置用的,但變成要用for去取data裡頭的x(因為資料型態是list)
作者: andrew43 (討厭有好心推文後刪文者)   2020-10-16 19:08:00
loop沒什麼不好,頂多比較難看。你可以額外練習記憶體預分配的技巧。推薦閱讀本板#1LjDrSmd
作者: getsimple (getsimple)   2020-10-16 22:41:00
a大,謝謝,馬上來看看
作者: rebe212296 (綠豆冰)   2020-10-16 22:52:00
combn(5,1);combn(5,2);combn(5,3);combn(5,4);然後取裡面有1的
作者: getsimple (getsimple)   2020-10-17 17:56:00
r大,了解,謝謝~
作者: khaos (出來混的...)   2020-10-17 20:56:00
是不是可以順便再搭配apply?
作者: TOOYA (在草地等流星)   2020-10-23 19:09:00
跑一個迴圈,把沒有1的丟掉,會不會比較簡單?

Links booklink

Contact Us: admin [ a t ] ucptt.com