lightsnail - 1 year ago 66
R Question

# Calculate the products of all the combinations in R

List

`a`
is as follows:

`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
``````

My aim is to calculate all the products of all the 2-element combinations in each object. For example, the first object in
`a`
is
`3 4 5 6`
, so all the products of the first object is
`12 15 18 20 24 30`
, and all the products of the second object is
`42 48 56`
. BUT when there is only one element in the object, the output should be
`0`
. I planed to solve the problem by using
`Map(function(x) combn(x,2,prod),a)`
, but it was not suitable when there was only one element in the object (such as the 4th object in
`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
``````

So how can I get all the 2-element products of all the combinations in each object and get
`0`
when there is only one element at the same time? Thanks!

My expected result is as follows:

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

[[2]]
[1] 42 48 56

[[3]]
[1] 12

[[4]]
[1] 0
``````

Use your approach and wrap `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
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download