2016-11-22 2 views
0

Ich habe eine Liste von data.frame, wo ich Transformation für .score Spalte tun muss. Allerdings habe ich für diese Transformation eine Hilfsfunktion implementiert. Nachdem ich .helperFunc für meine Eingabeliste von data.frame aufgerufen habe, aber ich habe seltsames pvalue Format im ersten, dritten data.frame. Wie man eine ziemlich große Dezimalzahl auf eine einfache wissenschaftliche Zahl normalisiert? Kann mir jemand sagen, wie man das leicht machen kann?Wie normal lange Dezimalzahl in R normalisieren?

Spielzeug Daten:

savedDF <- list(
    bar = data.frame(.start=c(12,21,37), .stop=c(14,29,45), .score=c(5,69,14)), 
    cat = data.frame(.start=c(18,42,18,42,81), .stop=c(27,46,27,46,114), .score=c(15,5,15,5,134)), 
    foo = data.frame(.start=c(3,3,33,3,33,91), .stop=c(26,26,42,26,42,107), .score=c(22,22,6,22,6,7)) 
) 

Ich habe dieses seltsame Ausgabe:

> .savedDF 
$bar 
    .start .stop .score                 p.value 
1  12 14  5 0.000010000000000000000817488438054070343241619411855936050415039062500 
2  21 29  69 0.000000000000000000000000000000000000000000000000000000000000000000001 
3  37 45  14 0.000000000000009999999999999999990459020882127560980734415352344512939 

$cat 
    .start .stop .score p.value 
1  18 27  15 1e-15 
2  42 46  5 1e-05 
3  18 27  15 1e-15 
4  42 46  5 1e-05 
5  81 114 134 1e-134 

$foo 
    .start .stop .score     p.value 
1  3 26  22 0.0000000000000000000001 
2  3 26  22 0.0000000000000000000001 
3  33 42  6 0.0000010000000000000000 
4  3 26  22 0.0000000000000000000001 
5  33 42  6 0.0000010000000000000000 
6  91 107  7 0.0000001000000000000000 

Ich weiß nicht, was dies geschehen, nur zweite data.frame‘Format gewünscht wird. Wie kann ich die p.value-Spalte so einfach wie möglich normalisieren?

letzte Spalte von cat wird als gewünschtes Format betrachtet, oder genauer, aber einfache wissenschaftliche Nummer ist auch für mich geeignet.

Wie kann ich diese Normalisierung für unerwartet lange Dezimalzahlen vornehmen? Wie kann ich meine gewünschte Leistung erzielen? Irgendeine Idee ? Vielen Dank

+3

Sie sollten nicht den Wert in den Daten ändern. Sie sollten sich vielmehr auf Ihre Druckoptionen verlassen, um den Wert in wissenschaftlicher Notation anzuzeigen. Was bringt 'getOption (x =" scipen ") zurück? – Gregor

+0

Ja, ich bekomme mit einer unveränderten Version von R nichts Vergleichbares. Ich bekomme nette wissenschaftliche Werte wie 1e-05 1e-69 usw. für alles. – thelatemail

+0

@ Jerry.Shad - im Grunde kann ich nicht replizieren, was Sie zeigen, indem Sie Ihren Code ausführen. Ich bekomme Werte wie für '.savedDF $ cat' für jeden Teil der Liste angezeigt. Ich schlage vor, dass Sie sich die Option ansehen, die Gregor vorgeschlagen hat, da Sie wahrscheinlich irgendwo eine Einstellung bearbeitet haben, die das Problem verursacht. – thelatemail

Antwort

2

0 ist die Standardeinstellung scipen Option. (Weitere Informationen finden Sie unter ?options.) Sie haben die Option anscheinend auf 100 gesetzt, wodurch R angewiesen wird, Dezimalschreibweise zu verwenden, es sei denn, es ist 100 Zeichen länger als die wissenschaftliche Notation. Um wieder auf den Standard zu erhalten, führen die Linie

options(scipen = 0) 

Was „Also in meiner Funktion habe ich auch diese Option hinzufügen könnte?“ - Sie sollten das nicht tun. Doing es in Ihrem Skript ist in Ordnung, aber nicht in einer Funktion. Funktionen sollten eigentlich keine Benutzeroptionen festlegen. Das ist wahrscheinlich, wie Sie in dieses Durcheinander geraten sind - eine Funktion, die Sie wahrscheinlich benutzt haben, lief rüde options(scipen = 100) und änderte Ihre Optionen, ohne dass Sie es bemerkten.

Verwandte: die entgegengesetzte Frage How to disable scientific notation in R?