计算R中所有组合的乘积

lig*_*ail 6 combinations r list

清单a如下:

a<-list(3:6,6:8,3:4,8)

> a
[[1]]
[1] 3 4 5 6

[[2]]
[1] 6 7 8

[[3]]
[1] 3 4

[[4]]
[1] 8
Run Code Online (Sandbox Code Playgroud)

我的目标是计算每个对象中所有2元素组合的所有产品.例如,第一个对象a3 4 5 6,所以第一个对象的12 15 18 20 24 30所有产品都是,第二个对象的所有产品都是42 48 56.但是当对象中只有一个元素时,输出应该是0.我计划通过使用来解决问题Map(function(x) combn(x,2,prod),a),但是当对象中只有一个元素(例如第4个对象a)时它不适合.

> Map(function(x) combn(x,2,prod),a)
[[1]]
[1] 12 15 18 20 24 30

[[2]]
[1] 42 48 56

[[3]]
[1] 12

[[4]]
 [1]  2  3  4  5  6  7  8  6  8 10 12 14 16 12 15 18 21 24 20 24 28 32 30 35 40 42 48 56
Run Code Online (Sandbox Code Playgroud)

那么如何在每个对象中获得所有组合的所有2元素产品,并0在同时只有一个元素的情况下获得?谢谢!

我的预期结果如下:

[[1]]
[1] 12 15 18 20 24 30

[[2]]
[1] 42 48 56

[[3]]
[1] 12

[[4]]
[1] 0 
Run Code Online (Sandbox Code Playgroud)

Rol*_*and 6

使用您的方法并包装combn:

a<-list(3:6,6:8,3:4,8)
combn2 <- function(x, ...) 
  if(length(x) == 1L) 0 else combn(x, ...)
Map(function(x) combn2(x,2,prod),a)
#[[1]]
#[1] 12 15 18 20 24 30
#
#[[2]]
#[1] 42 48 56
#
#[[3]]
#[1] 12
#
#[[4]]
#[1] 0
Run Code Online (Sandbox Code Playgroud)