2016-08-22 8 views
6

सूची a इस प्रकार है सभी संयोजनों के उत्पादों की गणना। उदाहरण के लिए, a में पहली वस्तु 3 4 5 6 है, इसलिए पहली वस्तु के सभी उत्पाद 12 15 18 20 24 30 हैं, और दूसरी वस्तु के सभी उत्पाद 42 48 56 हैं। लेकिन जब ऑब्जेक्ट में केवल एक तत्व होता है, तो आउटपुट 0 होना चाहिए। मैंने Map(function(x) combn(x,2,prod),a) का उपयोग कर समस्या को हल करने की योजना बनाई, लेकिन यह तब उपयुक्त नहीं था जब ऑब्जेक्ट में केवल एक तत्व था (जैसे 412 ऑब्जेक्ट 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 

तो मैं प्रत्येक वस्तु में सभी संयोजनों के सभी 2-तत्व उत्पादों कैसे हो जाते हैं और जब वहाँ एक ही समय में केवल एक ही तत्व है 0 मिल सकता है? धन्यवाद!

मेरे अपेक्षित परिणाम इस प्रकार है:

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

[[2]] 
[1] 42 48 56 

[[3]] 
[1] 12 

[[4]] 
[1] 0 

उत्तर

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 
3

हम एक if/else हालत

Map(function(x) if(length(x)==1) 0 else combn(x,2, FUN = prod),a) 
#[[1]] 
#[1] 12 15 18 20 24 30 

#[[2]] 
#[1] 42 48 56 

#[[3]] 
#[1] 12 

#[[4]] 
#[1] 0 

मैं के साथ की कोशिश कर सकते सोचो @ आरओ भूमि (, मेरे सामने 9 सेकेंड हालांकि मैं अपने जवाब नहीं देखा था) पहले यह उत्तर दिया, तो इसके बाद के संस्करण का एक परिवर्तन

ifelse(lengths(a)==1, 0, Map(function(x) combn(x, 2, prod), a)) 

या साथ है lapply

ifelse(lengths(a)==1, 0, lapply(a, function(x) combn(x, 2, FUN = prod))) 
संबंधित मुद्दे