2016-03-15 56 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