我正在为 C++ 程序编写 R 中的 functional test。典型的输出文件将一些列作为“字符串”,将其他列作为“ double ”。然后,我想使用 diff 将 R 返回的预期输出文件与 C++ 返回的观察输出文件进行比较。

在伪 C++ 中,我只是这样做:

stringstream ssTxt;
ssTxt.precision (7);
ssTxt.setf (ios::scientific);
for(i=0; i<10; ++i){
  ssTxt << names[i] << " " << values[0][i] << " " << values[1][i] << " " << values[2][i] << endl;
  // write in file and clear ssTxt
}

这是一个典型的输出:
item1 2.8200000e-01 500 4.1846912e-04

在 R 中,我这样做:
results <- data.frame(name="item1", val1=0.282, val2=500, val3=0.00041846912873)
write.table(x=format(results, digits=8, nsmall=7, scientific=TRUE), file=...)

这是对应于相同数据的输出:
item1 2.82e-01 500 4.1846912e-04

如您所见,它几乎可以工作,但 R 不会在“2.82”之后添加尾随 0。我更喜欢更改 R 代码而不是 C++ 代码。那我该怎么做呢?

最佳答案

你有没有尝试过sprintf 还是 formatC

具体来说我认为

sprintf("%e", 2.82e-01)

应该可以解决问题,但如上所述,请查看 help(sprintf),它描述了此函数的各种格式化功能......

关于c++ - 如何在 C++ 和 R 中使用完全相同的数字格式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13896280/

10-12 12:39
查看更多