किसी फ़ंक्शन का आउटपुट दबाएं


90

मैं एक कमांड (इस मामले में, applyफ़ंक्शन) के आउटपुट को दबाने के लिए देख रहा हूं ।

क्या बिना उपयोग के ऐसा करना संभव है sink()? मैंने नीचे वर्णित समाधान पाया है, लेकिन यदि संभव हो तो एक पंक्ति में ऐसा करना चाहते हैं।

आउटपुट को कैसे दबाएं


2
क्या आप समझा सकते हैं कि 'इन इनलाइन' का क्या मतलब है? अन्यथा आप जिस प्रश्न का हवाला देते हैं वह पहले से ही उत्तर प्रदान करता है और यह एक डुप्लिकेट है।
डिर्क एडल्डबुलेटेल

1
इस समाधान के लिए आउटपुट को चालू करने के लिए तीन पंक्तियों, एक पुनर्निर्देशन आउटपुट, कमांड और फिर दूसरे को चालू करने की आवश्यकता होती है।
टोर

8
या उपयोग करें capture.output। या *_plyप्लाईर पैकेज से उपयोग करें ।
हैडली

1
मैंने दूसरा हैडली का सुझाव lapplyदिया- यदि आप वास्तव में किसी एप्‍लिकेशन फंक्‍शन को अंजाम देने की कोशिश कर रहे हैं, जैसे कि प्रिन्टिंग आउटपुट के बिना, तो उसके plyrपैकेज से 'l_ply` शायद सबसे उपयुक्‍त विकल्‍प है।
शार्प

जवाबों:


92

यह स्पष्ट नहीं है कि आप ऐसा क्यों करना चाहते हैं sink, लेकिन आप किसी भी कमांड को लपेट सकते हैंinvisible() फ़ंक्शन और यह आउटपुट को दबा देगा। उदाहरण के लिए:

1:10 # prints output
invisible(1:10) # hides it

अन्यथा, आप अर्धविराम और कोष्ठक के साथ हमेशा चीजों को एक पंक्ति में जोड़ सकते हैं:

{ sink("/dev/null"); ....; sink(); }

5
'अदृश्य (बिल्ली ("हाय \ n")) की कोशिश करें - invisible()केवल एक अभिव्यक्ति के प्रिंट को दबाता है, यह sink()एक-लाइनर नहीं है।
डिर्क एडल्डबुलेटेल

2
ठीक है, लेकिन मुझे लगता है कि यह प्रश्नकर्ता की जरूरतों को पूरा करता है, जब तक कि मुझे सवाल में कुछ याद नहीं आ रहा है ...
शेन

1
उदाहरण के लिए, यह applyप्रश्न के अनुसार वापसी को दबा देता है invisible(apply(matrix(1:10), 1, as.numeric)):।
शेन

इसके बजाय { sink("/dev/null"); ....; sink(); }मैं निश्चित रूप से पसंद करूंगा capture.output, जैसा कि capture.outputप्रभावी रूप से ठीक ऊपर है, बस बहुत बेहतर है (स्रोत पर एक नज़र डालें, यह ऊपर के फैशन के रूप में सिंक कहता है, और इसके चारों ओर कुछ अच्छा सामान है)।
कुकी

3
idwविंडोज के तहत कार्य पर काम नहीं करता है । मुझे लगता है कि सबसे अच्छा समाधान का उपयोग कर रहा हैsink
TMS

58

capture.output()फ़ंक्शन का उपयोग करें । यह एक-बंद की तरह बहुत काम करता है sink()और इसके विपरीत invisible(), यह सिर्फ प्रिंट संदेशों की तुलना में अधिक दबा सकता है। /dev/nullUNIX NULपर या खिड़कियों पर फ़ाइल तर्क सेट करें । उदाहरण के लिए, डिर्क के नोट पर विचार करना:

> invisible(cat("Hi\n"))
Hi

> capture.output( cat("Hi\n"), file='NUL')
> 

10
काम नहीं करता है अगर आप इसे एक फ़ंक्शन पर लागू करना चाहते हैं जो कुछ मान लौटाता है और आप इस मान का उपयोग करना चाहते हैं
TMS

8
@TMS पिछले कुछ महीनों के दौरान कुछ बदलाव आया है? मैंने केवल एक फ़ंक्शन द्वारा दिए गए मान का उपयोग करने के लिए परीक्षण किया और यह काम किया ... capture.output(x <- log(2))और बाद xमें इसका मूल्य है log(2)...
ड्रमरोड

10

आप नीचे दिए गए 'कैप्चर.आउटपुट' का उपयोग कर सकते हैं। यह आपको बाद में डेटा का उपयोग करने की अनुमति देता है:

log <- capture.output({
  test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal")
})

test$betas

9

R केवल स्वचालित रूप से अनसाइन किए गए एक्सप्रेशन के आउटपुट को प्रिंट करता है, इसलिए बस applyएक वेरिएबल के परिणाम को असाइन करें , और यह प्रिंट नहीं होगा।


4
कुछ कार्यों में एक print()या एक cat()है जो स्क्रीन पर जाता है, असाइनमेंट के लिए नहीं।
14

9

निम्नलिखित फ़ंक्शन को वही करना चाहिए जो आप वास्तव में चाहते हैं:

hush=function(code){
  sink("NUL") # use /dev/null in UNIX
  tmp = code
  sink()
  return(tmp)
}

यहाँ समारोह के साथ उदाहरण के लिए:

foo=function(){
  print("BAR!")
  return(42)
}

चल रहा है

x = hush(foo())

42 से x असाइन करेगा लेकिन "BAR!" प्रिंट नहीं करेगा एसटीडी के बारे में

UNIX OS की तुलना में आपको "NUL" को "/ dev / null" से बदलना होगा


यह एकमात्र ऐसा उत्तर था जिसकी मुझे आवश्यकता थी, कम करके।
टॉमका

वास्तव में मुझे भी क्या चाहिए
गैस्पर

2

यदि किसी के यहां आरएमर्कडाउन के लिए लागू समाधान की तलाश है, तो यह सभी आउटपुट को दबा देगा:

```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({

# Your code goes here
2 * 2
# etc
# etc


})})
```

कोड चलेगा, लेकिन आउटपुट HTML दस्तावेज़ में प्रिंट नहीं किया जाएगा


1

हेडली की टिप्पणी को एक उत्तर के रूप में बनाना (बेहतर दिखाई देने की उम्मीद)। plyrपैकेज के उपयोग के साथ मुद्रण के बिना लागू परिवार का उपयोग संभव है

x <- 1:2
lapply(x, function(x) x + 1)
#> [[1]]
#> [1] 2
#> 
#> [[2]]
#> [1] 3

plyr::l_ply(x, function(x) x + 1)

रेप्रेक्स पैकेज द्वारा 2020-05-19 को बनाया गया (v0.3.0)


0
invisible(cat("Dataset: ", dataset, fill = TRUE))
invisible(cat(" Width: " ,width, fill = TRUE))
invisible(cat(" Bin1:  " ,bin1interval, fill = TRUE))
invisible(cat(" Bin2:  " ,bin2interval, fill = TRUE))
invisible(cat(" Bin3:  " ,bin3interval, fill = TRUE))

NULL के बिना लाइन के अंत में या अगली पंक्ति में आउटपुट का उत्पादन करता है

Dataset:  17 19 26 29 31 32 34 45 47 51 52 59 60 62 63
Width:  15.33333

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