Tắt thông báo khi tải một gói


98

Tôi có một gói trong R (ROCR) mà tôi cần tải trong môi trường R của mình. Khi tải gói, một tập hợp các thông báo sẽ được in. Điều này thường tốt, nhưng vì đầu ra của tập lệnh R của tôi đang được sử dụng để phân tích thêm, tôi muốn tắt hoàn toàn tất cả đầu ra này. Làm thế nào để làm điều đó? Hơn nữa, tôi muốn làm điều đó mà không cần phải sửa đổi ROCR, vì vậy những người dùng trong tương lai của tập lệnh này cũng không phải làm điều đó.

Cho đến nay:

  • sink()không hoạt động ở đây - chuyển hướng cả stdout và std err để /dev/nullkhông làm gì cho tôi.
  • Không có gì đáng ngạc nhiên, options(warnings=-1)cũng không làm gì cả, vì đây không phải là những cảnh báo, cho dù được in ra.

Có suy nghĩ gì không?


Những thông điệp nào đang được in?

1
Trong khi toàn bộ đầu ra là không cần thiết, một số dòng đầu tiên là: Loading required package: gplots Loading required package: gtools Loading required package: gdata- Lưu ý rằng nó sẽ không cho phép tôi định dạng thư một cách chính xác.
người học

Sau đó tải gplots, gtoolsgdatatrước khi tải ROCR.

2
@Jack, không, hãy xem câu trả lời của tôi bên dưới để biết cách khắc phục phù hợp.
Dirk Eddelbuettel

6
Bắt buộc "một gói của nó, không phải là một thư viện" bình luận ở đây
Spacedman

Câu trả lời:


148

Chỉ cần sử dụng suppressMessages()xung quanh library()cuộc gọi của bạn :

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> 

19
Bạn không nên sử dụng suppressPackageStartupMessages?
hadley,

9
Không có thu nhập ròng nào ngoài việc chi tiêu thêm X ký tự. Thêm vào đó, suppressPackageStartupMessageschỉ chặn các thông báo khởi động khi tôi thích suppressMessages()ngăn chặn bất kỳ và tất cả các thông báo (nhưng không phải cat()như tôi nhớ). Nhưng người ta không nên sử dụng nó trong văn bản khởi động.
Dirk Eddelbuettel,

1
Thật tuyệt khi đề xuất của Dirk cũng ngăn chặn các thông báo từ các gói phụ thuộc khi chúng được tải.
Matt Bannert

2
Có cách nào để nắm bắt những thông báo khởi động đó không? Tôi có thể nắm bắt các cảnh báo và lỗi, nhưng không biết làm thế nào để nắm bắt các thông báo khác như vậy.
Adrian

1
Vâng @Adrian có, quấn vào tryCatch và cung cấp xử lý tin nhắn
jangorecki

21

Câu trả lời của Dirk ngăn chặn tất cả các thông báo và không dành riêng cho các thông báo được tạo trong khi tải các gói.

Giải pháp chính xác hơn cho câu hỏi được hỏi là:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Giải thích chi tiết hơn một chút có thể được tìm thấy ở đây


12

Hãy sử dụng SuppressionPackageStartupMessages, xem câu trả lời của @MehradMahmoudian. Để đầy đủ, hãy thêm các ví dụ về cách sử dụng:

Đối với một thư viện, hãy sử dụng suppressPackageStartupMessages(...), ví dụ:

suppressPackageStartupMessages(library(ggplot2))

Đối với nhiều thư viện, hãy sử dụng suppressPackageStartupMessages({...}), ví dụ:

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

1

library(ROCR, quietly = TRUE) có thể là một lựa chọn thanh lịch hơn.


4
không thực sự, hãy thửlibrary(data.table, quietly = TRUE)
Gaurav Singhal

1

Bằng cách thêm quietly = Tnhư hình dưới đây sẽ giải quyết được vấn đề:

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

Trong trường hợp có nhiều gói, bạn có thể sử dụng:

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

và họ sử dụng lapply như sau:

lapply(PKGs, library, character.only = TRUE ,quietly = T)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.