आर में फाइल करने के लिए सभी कंसोल आउटपुट को कैसे बचाएं?


84

मैं सभी कंसोल टेक्स्ट को किसी फ़ाइल में रीडायरेक्ट करना चाहता हूं । यहाँ मैं कोशिश की है:

> sink("test.log", type=c("output", "message"))
> a <- "a"
> a
> How come I do not see this in log
Error: unexpected symbol in "How come"

यहाँ मुझे परीक्षण में क्या मिला है।

[1] "a"

यहाँ है कि मैं क्या चाहते हैं test.log:

> a <- "a"
> a
[1] "a"
> How come I do not see this in log
Error: unexpected symbol in "How come"

मैं क्या गलत कर रहा हूं? धन्यवाद!


: आप इस ट्यूटोरियल पर एक नज़र हो सकता है statisticsglobe.com/r-save-all-console-input-output-to-file
जोआचिम Schork

जवाबों:


108

आपको "आउटपुट" और "संदेश" को अलग-अलग सिंक करना होगा ( sinkफ़ंक्शन केवल पहले तत्व को देखता है type)

अब अगर आप चाहते हैं कि इनपुट भी लॉग इन हो, तो इसे एक स्क्रिप्ट में डालें:

script.R

1:5 + 1:3   # prints and gives a warning
stop("foo") # an error

और प्रॉम्प्ट पर:

con <- file("test.log")
sink(con, append=TRUE)
sink(con, append=TRUE, type="message")

# This will echo all input and not truncate 150+ character lines...
source("script.R", echo=TRUE, max.deparse.length=10000)

# Restore output to console
sink() 
sink(type="message")

# And look at the log...
cat(readLines("test.log"), sep="\n")

2
यह केवल आउटपुट प्रिंट करता है, लेकिन इनपुट प्रिंट नहीं करता है। मैं इनपुट लाइन देखना चाहता हूं, उदाहरण के लिए 1:5 + 1:3, इसके आउटपुट के बाद, फिर अगला, आदि। मैं इस प्रकार के लॉग का उत्पादन करना चाहता हूं, क्योंकि मेरे पास एक प्रोग्राम है जिसे चलाने के लिए 30+ GBytes RAM लगता है। मैं इसे अमेज़ॅन क्लाउड में चलाता हूं और आउटपुट को व्यक्तिगत फाइलों से बचाता हूं। मैं उस कोड को जल्दी से ढूंढना चाहता हूं जो लॉग को देखकर प्रत्येक फ़ाइल का उत्पादन करता है। नोट: यदि मैं सिर्फ कंसोल-एन-पेस्ट कंसोल आउटपुट को काटता हूं, तो यह ऐसा करता है।
user443854

5
@ user443854 यदि ऐसा है, तो इंटरेक्टिव काम को छोड़ना और स्क्रिप्ट के साथ काम करना एक बेहतर विचार है।
mbq

5
@ user443854: हाँ, क्या आप एक स्क्रिप्ट में कोड डाल सकते हैं? उस स्थिति में स्रोत ("script.R", echo = TRUE) चाल को करेगा - यदि आप आउटपुट को ऊपर बताए अनुसार पुनर्निर्देशित करते हैं।
टॉमी

@ टॉमी तुम यार। धन्यवाद! मेरे पास एक .R स्क्रिप्ट है, लेकिन मैं इसे रिमोट बॉक्स पर इंटरेक्टिव सेशन में पेस्ट कर रहा था। इसकी सोर्सिंग ट्रिक करती है।
user443854

2
@ user443854: हाँ, max.deparse.lengthतर्क का उपयोग करें । मैंने जवाब अपडेट किया।
टॉमी

11

यदि आपके पास कमांड लाइन तक पहुंच है, तो आप आर सीएमडी बैच के साथ कमांड लाइन से अपनी स्क्रिप्ट चलाना पसंद कर सकते हैं।

== स्क्रिप्ट की सामग्री शुरू करें। ==

a <- "a"
a
How come I do not see this in log

== स्क्रिप्ट की अंतिम सामग्री। ==

कमांड प्रॉम्प्ट पर (कई संयुक्त राष्ट्र के * एक्स वेरिएंट में "$", "सी:>" विंडोज़ में), चलाएं

$ R CMD BATCH script.R &

अनुगामी "और" वैकल्पिक है और पृष्ठभूमि में कमांड चलाता है। लॉग फ़ाइल का डिफ़ॉल्ट नाम "आउट" है, जो एक्सटेंशन यानी स्क्रिप्ट से जुड़ा है

== स्क्रिप्ट की सामग्री शुरू करें ।आउट ==

R version 3.1.0 (2014-04-10) -- "Spring Dance"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: i686-pc-linux-gnu (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

[Previously saved workspace restored]

> a <- "a"
> a
[1] "a"
> How come I do not see this in log
Error: unexpected symbol in "How come"
Execution halted

== स्क्रिप्ट की अंतिम सामग्री। = =


1
मैं zsh का उपयोग कर रहा हूं, किसी कारण से R CMD BATCH script.R &काम नहीं करता है।
गिल्बर्ट

4

आप नहीं कर सकते। अधिकांश पर आप आउटपुट sinkको savehistoryअलग से और इनपुट के साथ सहेज सकते हैं । या जैसे बाहरी उपकरण का उपयोग करें script, screenया tmux


3

ESS (Emacs Speaks स्टेटिस्टिक्स) r- मोड के साथ emacs में R चलाएं। मेरी स्क्रिप्ट और आर कोड के साथ एक खिड़की खुली है। एक और आर चल रहा है। कोड को सिंटैक्स विंडो से भेजा जाता है और मूल्यांकन किया जाता है। कमांड, आउटपुट, एरर और चेतावनियाँ सभी रनिंग आर विंडो सेशन में दिखाई देते हैं। कुछ कार्य अवधि के अंत में, मैं सभी आउटपुट को एक फ़ाइल में सहेजता हूं। मेरा अपना नामकरण प्रणाली * .R स्क्रिप्ट्स के लिए और *। आउटपुट फ़ाइलों को बचाने के लिए। यहाँ एक उदाहरण के साथ एक स्क्रीनशॉट है।Emacs / ESS के साथ R लिखने और मूल्यांकन करने वाला स्क्रीनशॉट।


1

यदि आप बैश शेल का उपयोग करने में सक्षम हैं, तो आप बस बैश स्क्रिप्ट के भीतर से आर कोड को चलाने और एक फाइल के लिए स्टडआउट और स्टेडर धाराओं को पाइप करने पर विचार कर सकते हैं। यहाँ एक वंशानुगत का उपयोग करके एक उदाहरण दिया गया है:

फ़ाइल: test.sh

#!/bin/bash
# this is a bash script
echo "Hello World, this is bash"

test1=$(echo "This is a test")

echo "Here is some R code:"

Rscript --slave --no-save --no-restore - "$test1" <<EOF
  ## R code
  cat("\nHello World, this is R\n")
  args <- commandArgs(TRUE)
  bash_message<-args[1]
  cat("\nThis is a message from bash:\n")
  cat("\n",paste0(bash_message),"\n")
EOF

# end of script 

तब जब आप स्क्रिप्ट और स्टडरआउट के साथ स्क्रिप्ट को लॉग फाइल में चलाते हैं:

$ chmod +x test.sh
$ ./test.sh
$ ./test.sh &>test.log
$ cat test.log
Hello World, this is bash
Here is some R code:

Hello World, this is R

This is a message from bash:

 This is a test

इसके लिए देखने के लिए अन्य चीजें बस एक लॉग फ़ाइल में आर heredoc से सीधे stdout और stderr pipping कोशिश करनी होगी; मैंने अभी तक यह कोशिश नहीं की है, लेकिन यह शायद भी काम करेगा।



1

बड़ी संख्या में लाइनों के लिए अपनी Rgui प्राथमिकताएं निर्धारित करें, फिर टाइमस्टैम्प और उपयुक्त अंतराल पर फ़ाइल के रूप में सहेजें।


2
कृपया विस्तृत करें
बूनबून

1

आप screenएक आर स्क्रिप्ट को चलाते हुए फाइल करने के लिए प्रिंट कर सकते हैं और उसी समय प्रगति देख सकते हैं (या नहीं) ।

जब स्क्रीन का उपयोग नहीं कर रहे हैं, तो उपयोग करें R CMD BATCH yourscript.R &और चरण 4।

  1. एक टर्मिनल में स्क्रीन का उपयोग करते समय, स्क्रीन शुरू करें

     screen
    
  2. अपनी आर स्क्रिप्ट चलाएं

     R CMD BATCH yourscript.R
    
  3. CtrlAफिर दूसरी स्क्रीन पर जाएंc

  4. (वास्तविक समय) के साथ अपने उत्पादन को देखो:

     tail -f yourscript.Rout
    
  5. CtrlAतब तक स्क्रीन के बीच स्विच करें n


1
  1. यदि आप किसी फाइल में सेव किए गए एरर मैसेज को प्राप्त करना चाहते हैं

    zz <- file("Errors.txt", open="wt")
    sink(zz, type="message")
    

    उत्पादन होगा:

    Error in print(errr) : object 'errr' not found
    Execution halted
    

    इस आउटपुट को Errors.txt नामक फ़ाइल में सहेजा जाएगा

  2. मामले में, आप एक फ़ाइल के लिए कंसोल के मुद्रित मान चाहते हैं जिसका उपयोग आप 'स्प्लिट' तर्क कर सकते हैं:

    zz <- file("console.txt", open="wt")
    sink(zz,  split=TRUE)
    print("cool")
    print(errr)
    

    आउटपुट होगा:

    [1] "cool"
    

    में सांत्वना। txt फ़ाइल। तो आपके सभी कंसोल आउटपुट को एक फाइल में print.txt नाम से प्रिंट किया जाएगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.