ปิดการใช้งานข้อความเมื่อโหลดแพ็คเกจ


105

ฉันมีแพ็คเกจใน R (ROCR) ที่ฉันต้องโหลดในสภาพแวดล้อม R ของฉัน เมื่อโหลดแพคเกจชุดข้อความจะถูกพิมพ์ออกมา โดยปกติจะใช้ได้ดี แต่เนื่องจากเอาต์พุตของสคริปต์ R ของฉันถูกใช้เพื่อการวิเคราะห์เพิ่มเติมฉันจึงต้องการปิดใช้งานเอาต์พุตทั้งหมดนี้โดยสิ้นเชิง ฉันจะทำอย่างไร นอกจากนี้ฉันต้องการทำโดยไม่ต้องแก้ไข ROCR เลยเพื่อให้ผู้ใช้สคริปต์นี้ในอนาคตไม่ต้องทำเช่นนั้น

จนถึงตอนนี้:

  • sink()ใช้ไม่ได้ที่นี่ - การเปลี่ยนเส้นทางทั้ง stdout และ std err เพื่อ/dev/nullไม่ทำอะไรให้ฉัน
  • ไม่น่าแปลกใจที่options(warnings=-1)ไม่ได้ทำอะไรเลยเนื่องจากสิ่งเหล่านี้ไม่ใช่คำเตือนต่อการพิมพ์

ความคิดใด ๆ ?


กำลังพิมพ์ข้อความอะไร

1
แม้ว่าผลลัพธ์ทั้งหมดจะไม่จำเป็น แต่หลายบรรทัดแรกคือ: Loading required package: gplots Loading required package: gtools Loading required package: gdata- โปรดทราบว่าจะไม่ยอมให้ฉันจัดรูปแบบข้อความอย่างถูกต้อง
ผู้เรียน

โหลดแล้วgplots, gtoolsและก่อนที่จะโหลดgdata ROCR

2
@ แจ็คไม่ดูคำตอบของฉันด้านล่างสำหรับการแก้ไขที่เหมาะสม
Dirk Eddelbuettel

6
ความคิดเห็นเกี่ยวกับ "เป็นแพ็คเกจไม่ใช่ห้องสมุด" ที่นี่
Spacedman

คำตอบ:


152

เพียงใช้ในการโทรsuppressMessages()ของคุณlibrary():

edd@max:~$ R

R version 2.14.1 (2011-12-22)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-pc-linux-gnu (64-bit)
[...]

R> suppressMessages(library(ROCR))
R>                                               # silently loaded
R> search() 
 [1] ".GlobalEnv"         "package:ROCR"         # it's really there      
 [3] "package:gplots"     "package:KernSmooth"
 [5] "package:grid"       "package:caTools"   
 [7] "package:bitops"     "package:gdata"     
 [9] "package:gtools"     "package:stats"     
[11] "package:graphics"   "package:grDevices" 
[13] "package:utils"      "package:datasets"  
[15] "package:methods"    "Autoloads"         
[17] "package:base"      
R> 

22
คุณไม่ควรใช้suppressPackageStartupMessages?
hadley

10
ไม่มีกำไรสุทธินอกเหนือจากการใช้จ่ายอักขระเพิ่ม X นอกจากนี้ยังsuppressPackageStartupMessagesระงับเฉพาะข้อความเริ่มต้นในขณะที่ฉันต้องการsuppressMessages()ระงับข้อความใด ๆ และทั้งหมด (แต่ไม่ใช่cat()ตามที่ฉันจำได้) แต่ไม่ควรใช้สิ่งนั้นในข้อความเริ่มต้น
Dirk Eddelbuettel

1
นอกจากนี้ยังดีที่คำแนะนำของ Dirk จะระงับข้อความจากแพ็คเกจต่างๆเช่นกันเมื่อโหลด
Matt Bannert

2
มีวิธีจับข้อความเริ่มต้นเหล่านั้นหรือไม่? ฉันจับคำเตือนและข้อผิดพลาดได้ แต่ไม่รู้วิธีจับข้อความอื่น ๆ
Adrian

1
@ เอเดรียใช่มีห่อเป็น tryCatch และให้ตัวจัดการข้อความ
jangorecki

23

คำตอบของ Dirkระงับข้อความทั้งหมดและไม่เฉพาะเจาะจงกับข้อความที่สร้างขึ้นขณะโหลดแพ็กเกจ

วิธีแก้ปัญหาที่ถูกต้องมากขึ้นสำหรับคำถามที่ถามคือ:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

สามารถดูคำอธิบายโดยละเอียดเพิ่มเติมได้ที่นี่


15

ใช้ suppressPackageStartupMessages ดูคำตอบโดย @MehradMahmoudian เพื่อความสมบูรณ์เพิ่มตัวอย่างการใช้งาน:

สำหรับหนึ่งไลบรารีให้ใช้suppressPackageStartupMessages(...)ตัวอย่างเช่น:

suppressPackageStartupMessages(library(ggplot2))

สำหรับหลายไลบรารีให้ใช้suppressPackageStartupMessages({...})ตัวอย่างเช่น:

suppressPackageStartupMessages({
    library(ggplot2)
    library(ggdendro)
})

3

การเพิ่มquietly = Tตามที่แสดงด้านล่างจะช่วยแก้ปัญหา:

suppressWarnings(suppressMessages(library("dplyr", quietly = T)))

ในกรณีที่มีหลายแพ็คเกจคุณสามารถใช้:

## specify the package names
PKGs <- c("affy","gcrma","readxl","ggplot2","lattice" )

และใช้ lapply ดังนี้:

lapply(PKGs, library, character.only = TRUE ,quietly = T)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.