2017-05-18 2 views
1

Ich möchte eine Reihe von zufällig generierten Zahlen in eine Textdatei mit festem Format schreiben. Aus einigen Gründen schrieb write.fwf nur die erste Spalte rechts, alle anderen Spalten erhielten eine zusätzliche Ziffer. Wie kann ich es reparieren? Vielen Dank!Warum write.fwf() nicht der festgelegten Breite folgte

set.seed(1899) 

    library(sensitivity) 
    library(randtoolbox) 

    par_lower <- c(0.12, 0.13, 0.038, 0.017) 
    par_upper <- c(12.00, 13.00, 3.800, 1.700) 

    sample_size <- 5 

    lim_para8 <- c(par_lower[1], par_upper[1]) 
    lim_para9 <- c(par_lower[2], par_upper[2]) 
    lim_parb8 <- c(par_lower[3], par_upper[3]) 
    lim_parb9 <- c(par_lower[4], par_upper[4]) 

    par_rand <- parameterSets(par.ranges = list(lim_para8, lim_para9, 
               lim_parb8, lim_parb9), 
           samples = sample_size, method = "sobol") 

    par_rand 

    # write to file 
    library(gdata) 
    file2write <- paste("par.txt", sep = "") 
    write.fwf(par_rand, file = file2write, width = c(10, 10, 10, 10), colnames = FALSE) 

Die Ergebnisse:

 6.060 6.56500 1.91900 0.858500 
    9.030 3.34750 2.85950 0.437750 
    3.090 9.78250 0.97850 1.279250 
    4.575 4.95625 2.38925 0.227375 
    10.515 11.39125 0.50825 1.068875 

Wenn ich

geändert
write.fwf(par_rand, file = file2write, width = c(10, 9, 9, 9), 
       colnames = FALSE, quote = FALSE, rownames = FALSE) 

ich diesen Fehler

bekam
Error in write.fwf(par_rand, file = file2write, width = c(10, 9, 9, 9), : 
     'width' (9) was too small for columns: V4 
    'width' should be at least (10) 
+0

Justs, indem Sie es betrachten: Ihre letzte Spalte hat eine Breite von 11. – KoenV

+0

Ich weiß, aber es wurde geschrieben von 'write.fwf()'. Ich möchte nur die Breite von 10 haben. Vielen Dank! – Tung

+0

Bitte sehen Sie sich die Antwort an. Ich denke, ich habe den Schuldigen und die Lösung gefunden. – KoenV

Antwort

1

Bitte versuchen Sie den Code unten, es funktioniert für mich. Ich habe mit verschiedenen Formaten getestet und alles funktioniert. Beide Codesegmente zurückgeben eine feste Formatdatei mit der Breite 4 x 10.

Dies ist natürlich, dass sep in der Definition von file2write Einstellung impliziert für nicht funktioniert die gewünschte Ausgabe mit write.fwf

bekommen
write.fwf(par_rand, file = "par2.txt", width = c(10, 10, 10, 10), colnames = FALSE, sep = "") 

write.fwf(par_rand, file = file2write, width = c(10, 10, 10, 10), colnames = FALSE, sep = "") 

Die folgende erzeugt das gleiche, aber mit 1x10 und 3x9, wie ich glaube, Sie

write.fwf(par_rand, file = "par3.txt", width = c(10, 9, 9, 9), colnames = FALSE, sep = "") 

Bitte lassen Sie mich wissen wollte, ob das ist, was Sie wollten.

+0

Sie hatten Recht. 'sep =" "' war was ich im 'write.fwf' Befehl vermisste. Vielen Dank! – Tung

+0

Mein Vergnügen, froh, dass ich helfen konnte. – KoenV

Verwandte Themen