आर

2013-03-07 5 views
11

में सूचियों के साथ दो सूचियों की संख्या सूचियों की सूची में एक साधारण गणना करने का कोई आसान तरीका है?आर

x <- list(a=list(1:4),b=list(1:6)) 
y <- list(a=list(1:4),b=list(1:6)) 

जब मैं कोशिश: x + y में त्रुटि::

x+y 

मैं त्रुटि प्राप्त द्विआधारी ऑपरेटर के लिए गैर-संख्यात्मक तर्क

एक्स और वाई बराबर लंबाई हैं, और शामिल केवल पूर्णांक एक मैट्रिक्स के साथ y + x करना संभव है, सूचियों के साथ सूचियों के लिए ऐसा करने का कोई तरीका है?

+0

, बस का उपयोग कर "+" 'list' के लिए लागू नहीं है। ऐसा इसलिए है क्योंकि 'सूची' में कोई भी आर वस्तु हो सकती है। इसलिए, 'सूची' के तत्वों को जोड़ने का कोई अस्पष्ट तरीका नहीं है। –

उत्तर

10

इस प्रकार उपयोग कर सकते हैं आप lapply का उपयोग एक साथ एक 2 सूची के माध्यम से जाने के लिए कर सकते हैं।

lapply(seq_along(x),function(i) 
     unlist(x[i])+unlist(y[i])) 

[[1]] 
a1 a2 a3 a4 
2 4 6 8 

[[2]] 
b1 b2 b3 b4 b5 b6 
2 4 6 8 10 12 

यदि x और y एक ही लंबाई की जरूरत नहीं है, तो आप ऐसा कर सकते हैं:

lapply(seq_len(min(length(x),length(y)),function(i) 
     unlist(x[i])+unlist(y[i])) 
+0

एक और अच्छा जवाब !, इस प्रयोग को लापरवाही से नहीं पता था, मैं हमेशा एक सूची में लापरवाही से उपयोग करता था इसलिए तत्व में फ़ंक्शन में उपयोग किया जाता था, लेकिन इस तरह से मैं उस तत्व को प्राप्त नहीं कर सका। – Jetse

+1

@Jetse lapply किसी भी सूची या पुनरावर्तक के माध्यम से पुनरावृत्त किया जा सकता है। लेकिन यहां समाधान 'mapply' – agstudy

+0

है इस उत्तर को चुना क्योंकि यह मेरी सूची संरचना रखता है। – Jetse

10

प्रत्येक सूची संभालने उसी संरचना है, तो आपको mapply रूप

mapply(function(x1, y1) x1[[1]]+y1[[1]], x, y) 
+0

धन्यवाद, मैपली वह काम था जिसे मैं ढूंढ रहा था! पहले इस समारोह को नहीं पता था, केवल आवेदन और लापरवाही जानता था ... – Jetse

+0

इसे मेरे अंतिम डेटासेट पर इस्तेमाल किया गया, फिर मैंने पाया कि मैंने अपनी सूची संरचना खो दी है, अजीबता से उसका जवाब मेरी सूची संरचना रखता है। – Jetse

+3

@Jetse 'SIMPLIFY = FALSE' जोड़ने का प्रयास करें। –