2010-06-04 24 views
7

मेरे पास कुछ हैं .डेटा फ़ाइलें जिनमें सेवफन() द्वारा परिभाषित सहेजे गए कार्यों को शामिल किया गया है।मौजूदा फ़ंक्शन ऑब्जेक्ट्स के बॉडी टेक्स्ट को संशोधित करें

बचाने फ़ाइलों पूर्व तिथि पैकेज "आधार" से approxfun करने के लिए "आँकड़े" परिवर्तन है, और इसलिए शरीर के कुछ

PACKAGE = "base" 

है और गलत पैकेज समारोह विफल कारण बनता है। मैं (myfun) को ठीक कर सकता हूं और बस "आंकड़े" के साथ "आधार" को प्रतिस्थापित कर सकता हूं, लेकिन मुझे एक स्वच्छ स्वचालित तरीका चाहिए।

क्या मैं इसे किसी भी तरह gsub() और body() के साथ कर सकता हूं?

मैं शरीर पाठ और वहाँ विकल्प

as.character(body(myfun)) 

साथ प्राप्त कर सकते हैं, लेकिन मुझे लगता है कि एक "कॉल" और परिभाषा की जगह में वापस चालू करने के लिए कैसे पता नहीं है।

(मुझे पता है कि एक बेहतर समाधान डेटा को मूल रूप approxfun द्वारा और बस समारोह पुन: इस्तेमाल किया बचाया है करने के लिए है, लेकिन मुझे आश्चर्य है कि वहाँ मौजूदा एक संशोधित करने के लिए एक समझदार तरीका है।)

संपादित करें: मैंने पाया इसे यहाँ

What ways are there to edit a function in R?

+0

संभव डुप्लिकेट http://stackoverflow.com/questions/2458013/क्या-तरीके-संपादन-ए-फ़ंक्शन-इन-आर) –

+0

मैंने 'body (foo) <- gsub (" पैकेज = 'आधार' "," पैकेज = 'आंकड़े' "की कोशिश की , शरीर (foo)) 'आपके लिए, लेकिन शरीर() पाठ वापस नहीं करता है ताकि आप इसे बदलने के लिए टेक्स्ट मैनिपुलेशन का उपयोग नहीं कर सकें। मैंने इसे @MrFlick –

+2

के साथ सत्यापित किया है, तो क्या आप अपना उत्तर लिख सकते हैं ताकि यह पोस्ट अब "अनुत्तरित" न हो? –

उत्तर

3

substitute समारोह का उपयोग करें।

उदाहरण के लिए:

myfun <- function(x,y) { 
    result <- list(x+y,x*y) 
    return(result) 
} 

body का उपयोग करना, चयन करने के लिए समारोह में परिवर्तन करना चाहते हैं क्या myfun एक सूची के रूप इलाज:

> body(myfun)[[2]][[3]][[2]] 
x + y 

जब आप यह बदलने के लिए, आप का उपयोग करना चाहिए substitute फ़ंक्शन ताकि आप फ़ंक्शन के हिस्से को call या name ऑब्जेक्ट के साथ उचित रूप से प्रतिस्थापित कर सकें। चरित्र तारों के साथ प्रतिस्थापित करना काम नहीं करता है क्योंकि फ़ंक्शंस को तार तारों के रूप में संग्रहीत या संचालित नहीं किया जाता है।

body(myfun)[[2]][[3]][[2]] <- substitute(2*x) 

अब समारोह के चयनित टुकड़ा प्रतिस्थापित किया गया है:

> myfun 
function (x, y) 
{ 
    result <- list(2 * x, x * y) 
    return(result) 
} 
की [? आर में एक समारोह वहाँ संपादित करने के लिए क्या तरीके हैं] (
संबंधित मुद्दे