2016-06-30 12 views
2

Diese Frage wurde zuvor gestellt, aber keine der Antworten funktioniert für mich.Wie zu vermeiden, Drucken/Anzeigen von Nachrichten

Ich verwende die Bibliothek rhdf5 von bioconductor.org, um HDF5-Dateien zu lesen: source ("http://bioconductor.org/biocLite.R"); BioLite ("rhdf5"); Bibliothek (rhdf5);

Wenn ich die h5read Funktion bestimmte Variablen zu lesen, die Verweise die folgende Warnmeldung enthalten wird gedruckt:

„Warnung:. H5read für Typ‚Referenz‘noch nicht implementiert Werte ersetzt durch NA“

(Es ist nicht rot wie Fehler und Warnungen in RStudio. Nur in schwarz dargestellt)

Die Warnung ist für mich OK, wie ich diese re nicht brauchen Ferenzen. Aber ich benutze diese Funktion, um Hunderte von Variablen zu lesen, so dass mein Bildschirm mit diesen Nachrichten verschmutzt wird. Zum Beispiel:

a <-h5read(f, "/#Link2#") 
Warning: h5read for type 'REFERENCE' not yet implemented. Values replaced by NA's 
Warning: h5read for type 'REFERENCE' not yet implemented. Values replaced by NA's 

ich alle Vorschläge versucht, habe ich (capture.output, SuppressMessage/Warnung, Waschbecken, Optionen (warnen, max.print, show.error.messages) gefunden:

  1. capture.output(a <- h5read(f, "/#Link2#"), file='/dev/null')
  2. ich habe auch versucht, unsichtbar für alle Fälle: invisible(capture.output(a <- h5read(f, "/#Link2#"), file='/dev/null'))
  3. suppressWarnings(suppressMessages(a <- h5read(f, "/#Link2#")))
  4. ich habe auch versucht suppressForeignCheck und 0.123.nur für den Fall
  5. {sink("/dev/null"); a <-h5read(f, "/#Link2#"); sink()}
  6. {options(warn=-1, max.print=1,show.error.messages=FALSE); a <-h5read(f, "/#Link2#") }

Sie alle die gleichen Warnmeldungen halten produzieren.

Kennt jemand andere Dinge, die ich versuchen könnte, oder warum funktionieren diese Dinge nicht?

Wie schafft es die Bibliothek, die Nachrichten auszudrucken und alle diese zu überspringen? Klingt, dass ich etwas falsch machen könnte ...

Jede Hilfe wird geschätzt.

nur als Referenz, das sind die anderen Beiträge, die ich verwendet:

+1

hmmm vielleicht ein 'a <- versuchen (..., silent = TRUE)'? –

+0

@DominicCommois Das ist für Fehler, "Versuch" ignoriert Warnungen. –

+0

Möchten Sie die Referenzen aus den Daten entfernen? –

Antwort

3

Sie sollten maintainer("rhdf5") bitten, eine Lösung zu bieten - Nachricht weniger häufig drucken und Verwenden Sie Standard-R-Warnungen - die Nachricht stammt von C code und verwendet printf() anstelle von Rf_warning() oder Rf_ShowMessage() oder Rprintf()/REprintf().

Hier ist eine Darstellung des Problems

> library(inline) 
> fun = cfunction(character(), 'printf("hello world\\n"); return R_NilValue;') 
> fun() 
hello world 
NULL 
> sink("/dev/null"); fun(); sink() 
hello world 
> 

und eine Lösung - verwenden Rf_warning() R Warnungen zu generieren. Das Beispiel zeigt auch, wie das Schreiben in den Ausgabestrom von R über Rprintf() dann ermöglichen würde, den Ausgang mit Senke zu erfassen.

> fun = cfunction(character(), 'Rf_warning("hello world"); return R_NilValue;') 
> x = fun() 
Warning message: 
In fun() : hello world 
> x = suppressWarnings(fun()) 
> fun = cfunction(character(), 'Rprintf("hello world\\n"); return R_NilValue;') 
> sink("/dev/null"); fun(); sink() 
> 

Nichts davon hilft Ihnen jedoch direkt!

UPDATE Der Maintainer aktualisierte den Code im 'devel' Zweig des Pakets, Version 2.17.2.

+0

Da der Betreuer nun seine eigene Forschungsgruppe betreibt, gibt es leider eine hohe Wahrscheinlichkeit, dass es keine schnelle Antwort geben wird (EDIT: Nun, vielleicht wird es geschehen, ich habe gerade bemerkt, wer sich kürzlich dazu verpflichtet hat)). Es kann schneller sein, den Code zu reparieren (und optional über eine Pull-Anforderung an den Bioconductor zu übermitteln). Oder versuchen Sie eine andere HDF5-Bibliothek. Es gibt [h5] (https://cran.r-project.org/web/packages/h5/index.html) auf CRAN. Keine Ahnung von seiner Qualität, aber es wird aktiv gepflegt. –

+0

Vielen Dank @Martin Morgan. Sie haben absolut Recht, was leider bedeutet, dass es keine schnelle Umgehung gibt :-( Ich werde mit H5 bewerten, aber ich möchte nicht die Abhängigkeit von beiden Bibliotheken haben, und der Code mit rhdf5 ist bereits groß .. – MAB

+0

Ich postete ein Artikel in der Support-Website von Bioconductor: https://support.bioconductor.org/p/84611/ – MAB

Verwandte Themen