2017-05-18 5 views
1

Je souhaite écrire un ensemble de nombres générés aléatoirement dans un fichier texte au format fixe. Mais pour certaines raisons, write.fwf n'a écrit que la première colonne à droite, toutes les autres colonnes ont reçu un chiffre supplémentaire. Comment puis-je le réparer? Merci!Pourquoi write.fwf() n'a pas suivi le jeu de largeur fixe

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) 

Les résultats:

 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 

Si j'ai changé pour

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

J'ai eu cette erreur

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 en le regardant: votre dernière colonne a une largeur de 11. – KoenV

+0

Je sais mais il a été écrit par 'write.fwf()'. Je voudrais avoir la largeur de 10 seulement. Merci! – Tung

+0

S'il vous plaît regardez la réponse. Je pense que j'ai trouvé le coupable et la solution. – KoenV

Répondre

1

S'il vous plaît essayer le code ci-dessous, cela fonctionne pour moi. J'ai testé avec plusieurs formats et tout a fonctionné. Les deux segments de code renvoient un fichier de format fixe avec une largeur de 4 x 10.

Ceci implique bien sûr que la mise en sep dans la définition de file2write ne fonctionne pas pour obtenir la sortie désirée avec write.fwf

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 = "") 

Le suivant génère le même mais avec 1x10 et 3x9, comme je pense que vous vouliez

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

S'il vous plaît laissez-moi savoir si c'est ce que vous vouliez.

+0

Vous aviez raison. 'sep =" "' était ce que j'ai manqué dans la commande 'write.fwf'. Je vous remercie! – Tung

+0

Mon plaisir, heureux je pourrais aider. – KoenV