如何使用write.table格式化输出

时间:2016-03-15 03:03:04

标签: r write.table

如果这是一个简单的问题,我道歉。我试图使用R中的MixSim包中的点作为旧Fortran程序中的采样点,因为我喜欢MixSim更好地创建采样点的方式,但我使用Fortran程序模拟多个级别的植被数据beta多样性,alpha多样性等。

我通过以下方式在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

但是我需要我的输出看起来与Fortran程序完全相同才能接受它。

***** 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个点。

1 个答案:

答案 0 :(得分:2)

(使用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。