[问题] 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