2016-03-15 76 views
0

如果這是一個簡單的問題,我很抱歉。我試圖用R中的MixSim包中的點來充當舊的Fortran程序中的採樣點,因爲我喜歡MixSim更好地創建採樣點的方式,但我使用Fortran程序來模擬植物數據beta多樣性,阿爾法多樣性等如何格式化輸出與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 

我要指出,我確切地知道如何做舍入R:

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

是我最好的選擇將被簡單地使用write.table,然後格式化「手動」 。我的大多數模型都將在我在Fortran中編寫的循環中創建。我只需要在MixSim中生成幾十個模型,然後格式化它們(如果是這種情況)。所有模型將有相當多的10點。

+0

你可以得到相當接近與'DF < - signif(DF,4); write.table(df,'df.txt',sep ='\ t',row.names = FALSE,quote = FALSE)',但沒有標題,並且由於某種原因它似乎刪除了尾隨零。當然有人寫過'read.fortran'這一行的特定於Fortran的寫函數,但我不確定它是什麼。 – alistaire

+0

我認爲你可以對整個data.frame應用'round'。 '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該文件序言和PKG 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