2016-03-15 4 views
0

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

я произвожу мои данные в 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 

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

***** 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 

Я должен отметить, что я точно знаю, как сделать округление в г по:

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

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

+0

вы можете получить довольно близко с 'ДФ <- signif (ДФ, 4); write.table (df, 'df.txt', sep = '\ t', row.names = FALSE, quote = FALSE) ', но нет заголовков, и по какой-то причине они, похоже, теряют конечные нули. Наверняка кто-то написал специфическую для Fortran функцию записи по строкам 'read.fortran', но я не уверен, что это такое. – alistaire

+0

Я думаю, вы можете просто применить 'round' ко всему data.frame. 'write.table' может иметь' sep = "\ t" 'Говорить, что это должно выглядеть так" не так полезно. Что такое те элементы «50 3 1 0.0000 \ n 50», ... и должна ли быть первая строка, которая у вас есть в формате кода? Будьте настолько конкретны, насколько сможете. –

+0

@ 42, да все это должно быть там. 50 - номер выборки, 3 - количество групп, 1 - количество измерений (в этом примере), а 0.000 - это местозаполнитель для случайного числа сгенерированного числа. 'write.table', кажется, усекает мои десятичные знаки и не устанавливает каждый элемент в 4 пространства друг от друга, как это необходимо. – NDD

ответ

1

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

Использования cat для файла преамбулы и write.fwf от упака :: 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.

+0

Спасибо, это по-прежнему требует небольшого количества редактирования после факта, но я полагаю, что это, вероятно, неизбежно, потому что я использую программу, написанную в момент времени, когда Fortran требовал очень строгих отступов и столбцов. Таким образом, процесс форматирования станет показом ужасов, но меньше, чем раньше. – NDD

Смежные вопросы