2012-11-28 12 views
5

नेस्टेड सूचियां बनाते समय आर, जो मैं मानता हूं, सूची के तत्वों के लिए उपयोगी नामकरण संरचना है। मेरे पास सूचियों की एक सूची है और किसी भी सूची में निहित प्रत्येक एकल वेक्टर का एक फ़ंक्शन लागू करना चाहता हूं। lapply ऐसा करता है लेकिन फिर सूची की नामकरण संरचना को स्ट्रिप्स करता है। नामों को अलग किए बिना नेस्टेड सूची के प्रत्येक वेक्टर तत्व के lapply कैसे हो सकता है? मैंने इसके बजाय इंडेक्स पास करने की कोशिश की लेकिन ऐसा लगता है कि एक ही चीज (पट्टी नाम)।नेस्टेड सूची में लापरवाही से और नामकरण/संरचना

TEST <- list(n1=list(a="5", b="65"), n2=list(a="f", b= "f6")) 
TEST 
lapply(TEST, function(x) gsub("6", "foo", x)) 
lapply(seq_along(TEST), function(i) gsub("6", "foo", TEST[[i]])) 

कंसोल आउटपुट:

> TEST 
$n1 
$n1$a 
[1] "5" 

$n1$b 
[1] "65" 


$n2 
$n2$a 
[1] "f" 

$n2$b 
[1] "f6" 


> lapply(TEST, function(x) gsub("6", "foo", x)) 
$n1 
[1] "5" "foo5" 

$n2 
[1] "f" "ffoo" 

वांछित परिणाम:

$n1 
$n1$a 
[1] "5" 

$n1$b 
[1] "foo5" 


$n2 
$n2$a 
[1] "f" 

$n2$b 
[1] "ffoo" 
+0

@shujaa लेखन से बचने के लिए की तरह हाँ मुझे अपनी टिप्पणी को प्रतिबिंबित करने के –

उत्तर

10

ऐसा लगता है आप चाहते हैं की rapply संस्करण * परिवार

rapply(TEST, function(x){gsub("6", "foo", x)}, how = "list") 

$n1 
$n1$a 
[1] "5" 

$n1$b 
[1] "foo5" 


$n2 
$n2$a 
[1] "f" 

$n2$b 
[1] "ffoo" 

तुम भी कर सकता है लागू होते हैं यह इस एक गुमनाम समारोह

rapply(TEST, gsub, pattern = "6", replacement = "foo", how = "list") 
+0

+1 ने मुझे यह करने के लिए मारो संपादित, और मुझे कुछ टाइपिंग – Andrie

+1

ओह नई आर वूडू जादू के साथ मैं कभी नहीं खेला है बचा लिया। धन्यवाद डेसन। मैं 'rapply' के बारे में जानता था, लेकिन इसका उपयोग कैसे या क्यों नहीं। उत्तम। –

+0

'rapply' के बिना कोई और तरीका? यह अपने तर्कों का मूल्यांकन करता है, इसलिए भाषा वस्तुओं पर लूपिंग करते समय यह उपयोगी नहीं होता है। – jangorecki

संबंधित मुद्दे