2012-04-02 10 views
7

मुझे कभी-कभी पता चलता है कि एक आर स्ट्रिंग के रूप में एक वर्ण स्ट्रिंग के रूप में मुद्रित प्रतिनिधित्व प्राप्त करना उपयोगी होगा, जैसे कि पायथन के repr फ़ंक्शन या लिस्प के prin1-to-string। क्या ऐसा कोई कार्य आर में मौजूद है? मुझे जटिल या अजीब वस्तुओं, बस साधारण वैक्टर और सूचियों पर काम करने की आवश्यकता नहीं है।क्या आर के पास पाइथन के "repr" (या Lisp's "prin1-to-string") के बराबर है?

संपादित करें: मैं स्ट्रिंग चाहता हूं कि मुझे एक समान वस्तु उत्पन्न करने के लिए कंसोल में टाइप करना होगा, न कि print(object) का आउटपुट। बिना इन पंक्तियों के साथ लाइन नंबर कुछ एक संस्करण के लिए

repr <- function(x) { 
    paste(sprintf('%s\n', capture.output(show(x))), collapse='') 
} 

काम करना चाहिए:

+7

शायद आप 'dput' की तलाश में हैं? –

+0

आर में अधिकांश ऑब्जेक्ट्स में एक डिफ़ॉल्ट प्रिंट विधि होती है जो आप पूछ रहे हैं कि क्या आप उन्हें कमांड लाइन पर कॉल करते हैं। '> x <- 1:10' '> x' – Justin

+0

@ जस्टिन, मेरा मतलब है कि मैं प्रतिनिधित्व करना चाहता हूं कि मैं ऑब्जेक्ट बनाने के लिए आर कंसोल में टाइप करूंगा, जैसे कि 'repr' पायथन में (समर्थित ऑब्जेक्ट्स के लिए)। –

उत्तर

16

मैं आपके द्वारा सूचीबद्ध पायथन/लिस्प फ़ंक्शन से परिचित नहीं हूं, लेकिन मुझे लगता है कि आप या तो dput या dump चाहते हैं।

x <- data.frame(1:10) 
dput(x) 
dump("x", file="clipboard") 
+1

हां, डंप/डंप ऐसा लगता है जैसे वे चाहते हैं। धन्यवाद। –

+0

यह सरल आर ऑब्जेक्ट्स (वेक्टर, मैट्रिस, डेटा फ्रेम, उन चीजों की सूचियों, एस 4 कक्षाओं) के लिए काम करेगा, लेकिन पर्यावरण और इसके वातावरण में कुछ भी विफल रहता है (बंद, पर्यावरण तत्वों के साथ सूचियां) शायद अन्य जटिल वर्ग भी । – Spacedman

1

आप capture.output उपयोग कर सकते हैं

repr <- function(x) { 
    cat(sprintf('%s\n', capture.output(show(x))), collapse='') 
} 
+0

परिणाम छापने के लिए बस 'बिल्ली' का उपयोग करें। यह रेखा संख्या से छुटकारा पाना चाहिए। –

+1

मैं 'प्रिंट (ऑब्जेक्ट) 'का आउटपुट नहीं चाहता हूं, मैं ऑब्जेक्ट बनाने के लिए टाइप करने वाले अक्षरों की स्ट्रिंग चाहता हूं। –

6

का मूल्यांकन पैकेज में ?evaluate देखें।

संपादित करें: बाद में पोस्टर ने टिप्पणियों में स्पष्ट किया कि वह आदेश चाहते थे जो print(object) आउटपुट वाले स्ट्रिंग के बजाय ऑब्जेक्ट का पुनर्निर्माण करेगा। उस स्थिति में evaluate वांछित नहीं है लेकिन dput (जैसा कि पहले से ही Joshua Ullrich द्वारा टिप्पणियों में उल्लेख किया गया है और जब से मैंने पोस्ट किया है उसे उत्तर में स्थानांतरित कर दिया गया है) और dump काम करेगा। recordPlot और replayPlot कम से कम विंडोज पर क्लासिक ग्राफिक्स को स्टोर और दोहराएगा। trellis.last.object अंतिम जाली ग्राफिक्स ऑब्जेक्ट को पुनर्प्राप्त करेगा। यह भी ध्यान रखें कि .Last.value पर इंटरैक्टिव कंसोल पर बहुत ही अंतिम मूल्य है।

1

मेरे पास बिल्कुल वही प्रश्न था। मैं सोच रहा था कि इसके लिए कुछ बनाया गया था या अगर मुझे इसे खुद लिखना होगा। मुझे कुछ भी अंतर्निहित नहीं मिला, इसलिए मैंने निम्नलिखित कार्यों को लिखा:

dputToString <- function (obj) { 
    con <- textConnection(NULL,open="w") 
    tryCatch({dput(obj,con); 
      textConnectionValue(con)}, 
      finally=close(con)) 
} 

dgetFromString <- function (str) { 
    con <- textConnection(str,open="r") 
    tryCatch(dget(con), finally=close(con)) 
} 

मुझे लगता है कि यह वही है जो आप चाहते हैं। यहां एक परीक्षण है:

> rep <- dputToString(matrix(1:10,2,5)) 
> rep 
[1] "structure(1:10, .Dim = c(2L, 5L))" 
> mat <- dgetFromString(rep) 
> mat 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 7 9 
[2,] 2 4 6 8 10 
संबंधित मुद्दे