একটি ফাংশন আউটপুট দমন


90

আমি একটি কমান্ডের আউটপুট দমন করতে চাইছি (এই ক্ষেত্রে, applyফাংশন)।

এটি ব্যবহার না করে এটি করা সম্ভব sink()? আমি নীচে বর্ণিত সমাধানটি পেয়েছি, তবে এটি সম্ভব হলে এক লাইনে এটি করতে চাই।

কিভাবে আউটপুট দমন করা যায়


4
'এই ইনলাইনটি করুন' বলতে কী বোঝাতে চেয়েছেন আপনি কি তা ব্যাখ্যা করতে পারেন? অন্যথায় আপনি যে প্রশ্নটি উদ্ধৃত করেছেন তা ইতিমধ্যে উত্তর সরবরাহ করে এবং এটি একটি সদৃশ।
ডার্ক এডেলবুয়েটেল

4
এই সমাধানটির জন্য তিনটি লাইন দরকার হয়, একটি পুনর্নির্দেশ আউটপুট, কমান্ড এবং তারপরে অন্যটি আউটপুট চালু করতে পারে।
টোর

8
বা ব্যবহার capture.output। বা *_plyপাতলা প্যাকেজ থেকে ব্যবহার করুন ।
হ্যাডলি

4
আমি দ্বিতীয় হ্যাডলির lapplyপরামর্শ- যদি আপনি সত্যিই কোনও প্রয়োগ ফাংশন সম্পাদন করার চেষ্টা করছেন, যেমন , আউটপুট প্রিন্ট না করেই তার plyrপ্যাকেজ থেকে 'l_ply` সম্ভবত সবচেয়ে উপযুক্ত পছন্দ।
শার্পি

উত্তর:


92

আপনি কেন এটি ছাড়া এটি করতে চান তা স্পষ্ট নয় sink, তবে আপনি ফাংশনটিতে কোনও আদেশ সজ্জিত করতে পারেন invisible()এবং এটি আউটপুটকে দমন করবে। এই ক্ষেত্রে:

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

অন্যথায়, আপনি সর্বদা সেমিকোলন এবং বন্ধনীগুলির সাথে জিনিসগুলিকে এক লাইনে একত্রিত করতে পারেন:

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

4
'অদৃশ্য (বিড়াল ("হাই \ n"))' চেষ্টা করুন - invisible()কেবলমাত্র একটি অভিব্যক্তিটির মুদ্রণ দমন করে, এটি sink()ওয়ান-লাইনার নয়।
ডার্ক এডেলবুয়েটেল

4
ঠিক আছে, তবে আমি মনে করি এটি প্রশ্নের উত্তরদাতাদের চাহিদা পূরণ করে, যদি না আমি প্রশ্নটিতে কিছু মিস করি ...
শেন

4
উদাহরণস্বরূপ, applyএটি প্রশ্ন অনুসারে: এর প্রত্যাবর্তনকে দমন করে invisible(apply(matrix(1:10), 1, as.numeric))
শান

পরিবর্তে { sink("/dev/null"); ....; sink(); }আমি স্পষ্টতই পছন্দ করব capture.output, capture.outputঠিক যেমন কার্যকরভাবে উপরেরটি ঠিক যেমন করে তোলে ঠিক তার চেয়ে অনেক বেশি ভাল (উত্সটি দেখুন, এটি উপরের ফ্যাশনের মতো ডুবে ডাকছে, পাশাপাশি এর চারপাশে কিছু সুন্দর জিনিস)।
কুকি

4
idwউইন্ডোজ অধীনে ফাংশন কাজ করে না । আমি মনে করি সেরা সমাধানটি ব্যবহার করছেsink
টিএমএস

58

capture.output()ফাংশনটি ব্যবহার করুন । এটি এক-অফের মতো খুব বেশি কাজ করে sink()এবং এর বিপরীতে invisible(), এটি কেবল বার্তা মুদ্রণের চেয়ে আরও দমন করতে পারে। /dev/nullইউনিক্স বা NULউইন্ডোতে ফাইল আর্গুমেন্ট সেট করুন । উদাহরণস্বরূপ, ডার্কের নোটটি বিবেচনা করুন:

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

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

10
আপনি যদি এমন কোনও ফাংশনে এটি প্রয়োগ করতে চান যা কাজ করে না যা কিছু মান দেয় এবং আপনি এই মানটি ব্যবহার করতে চান
টিএমএস

8
@ টিএমএস গত কয়েক মাসে কিছু পরিবর্তন করেছে? আমি কেবল একটি ফাংশন দ্বারা প্রত্যাবর্তিত মানটি ব্যবহার করার জন্য পরীক্ষা করেছি এবং এটি কাজ করেছে ... 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

আর কেবল অ-স্বাক্ষরিত এক্সপ্রেশনগুলির আউটপুট স্বয়ংক্রিয়ভাবে মুদ্রণ করে, সুতরাং কেবলমাত্র এর ফলাফলটি applyএকটি ভেরিয়েবলের জন্য বরাদ্দ করুন , এবং এটি মুদ্রিত হবে না।


4
কিছু ফাংশনগুলির একটি print()বা cat()সেগুলিতে থাকে যা কোনও অ্যাসাইনমেন্টে নয়, স্ক্রিনে যায়।
কিথপজল্লি

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 নির্ধারণ করবে কিন্তু "বার!" প্রিন্ট করবে না থামাতে

ইউনিক্স ওএসের চেয়ে নোট আপনাকে "এনএইউএল" "" / দেব / নাল "দিয়ে প্রতিস্থাপন করতে হবে


এটিই ছিল আমার উত্তর, আন্ডাররেটেড যা কেবলমাত্র প্রয়োজন তা করেছিল answer
টমকা

ঠিক আমারও যা প্রয়োজন
গাস্পার

3

যে কেউ এখানে পৌঁছেছে আরএমকারডাউনের ক্ষেত্রে প্রযোজ্য কোনও সমাধান খুঁজছেন, এটি সমস্ত আউটপুট দমন করবে:

```{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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.