Как отформатировать вывод с помощью write.table

Я прошу прощения, если это простой вопрос. Я пытаюсь использовать точки из пакета MixSim в R, чтобы действовать в качестве точек выборки в старой программе на Fortran, потому что мне нравится, как MixSim лучше создает точки выборки, но я использую программу Fortran для имитации данных о растительности на многих уровнях. бета-разнообразие, альфа-разнообразие и т. д.

Я генерирую свои данные в MixSim с помощью:

d=MixSim(BarOmega=0.000,MaxOmega=0.000,K=4,p=3,ecc=0.99,int=c(10,90),PiLow=0.1)
m=simdataset(n=10,Pi=d$Pi,Mu=d$Mu,S=d$S)

И если я использую write.table, это то, что я получаю

write.table(m$X,file="example.txt",quote=F,row.names=F)
V1 V2 V3
87.540626647788 62.8444539443256 17.0026406651813
83.9939847940881 65.0069747775257 18.8676229149976
84.4477456535804 63.6892673685408 18.6384437248469
84.7684968694547 65.4610993744652 17.6252989584773
13.4600970937604 16.9988156469822 49.6810813619893
23.9952555783055 18.6598302958281 48.4204641715953
17.0523647853253 11.518037157788 43.0417655739052
57.5107395863171 40.4872578216636 24.938188234695
11.8320140526743 52.9077915021041 34.5723480775864
12.8754032313702 53.1795899126135 34.1309377040482

Но мне нужно, чтобы мой вывод выглядел в точности так, чтобы программа на Фортране приняла его.

***** SAMPLING PATTERN FILE

 50   3   1          0.0000
50
   87.54    62.84    17.00
   83.99    65.00    18.86
   84.44    63.68    18.63
   84.76    65.46    17.62
   13.46    16.99    49.68
   23.99    18.65    48.42
   17.05    11.51    43.04
   57.51    40.48    24.93
   11.83    52.90    34.57
   12.87    53.17    34.13

Должен отметить, что я точно знаю, как выполнить округление в r:

m=round(m$X,digits=2)

Моя лучшая ставка будет просто использовать write.table, а затем форматировать "вручную". Большинство моих моделей будут создаваться в цикле, который я написал на Фортране. Мне нужно всего лишь создать несколько десятков моделей в MixSim, а затем отформатировать их, если это так. Все модели будут иметь значительно более 10 баллов.

1 ответ

Решение

(Пробовал разные вещи с write.table, но всегда получал нежелательное усечение десятичных значений, когда конечные цифры были nn.00.)

использование cat для преамбулы файла и write.fwf из pkg::gdata:

cat(top, file='out.txt')
install.packages('gdata')
gdata::write.fwf(signif(dat,4), file = "out.txt", append = TRUE, quote = FALSE, sep = "\t", 
                   colnames = FALSE)

-------result----------
***** SAMPLING PATTERN FILE

 50   3   1          0.0000
50
87.54   62.84   17.00
83.99   65.01   18.87
84.45   63.69   18.64
84.77   65.46   17.63
13.46   17.00   49.68
24.00   18.66   48.42
17.05   11.52   43.04
57.51   40.49   24.94
11.83   52.91   34.57
12.88   53.18   34.13

Если вам нужна прокладка на LHS, вы можете использовать width=7 или 8.

Другие вопросы по тегам