Fortran77写入(0,*)DLL命令不刷新到R GUI控制台

时间:2016-03-08 02:32:53

标签: r fortran fortran77

我有一个Fortran77源代码,其中包含许多以下形式的打印命令:

写( fileID ,标签)somevariable

此F77代码通过" R CMD SHLIB code.f"编译。到从R调用的DLL中。如果在F77代码中,fileID是常规文本文件,则该命令正常工作。但是,如果是标准控制台输出, 即 fileID = 0 ,R会创建一个" fort.0"临时文件,而不是在R GUI控制台窗口中显示输出。

仅在我的Windows 64位版本中出现此问题。在Linux 32位和64位下, fileID = 0 的输出在控制台中正确显示。

我已经尝试过flush.console()命令。没有成功。

有没有人知道如何解决这个问题?遗憾的是,从R中的F77重写写入(0,*)命令不是一种选择。

谢谢!

1 个答案:

答案 0 :(得分:1)

你不应该在加载到R中的扩展模块中使用本机打印方法。Writing R Extensions有这样的说法:

  

6.5.1从FORTRAN打印

     

在许多系统上可以使用FORTRAN'write'和'print'语句,   但是输出可能与C的输出不能很好地交错,并且会   在GUI界面上不可见。它们不便携,最好避免使用。

     

提供三个子程序以便于输出信息   来自FORTRAN代码。

textBoxCSVymValues
     

这里LABEL是一个最多255个字符的字符标签,NCHAR就是它   length(如果要使用整个标签,可以是'-1')和DATA   是一个长度至少为适当类型的NDATA的数组('double   精度','实数'和'整数'分别)。打印这些例程   一行上的标签,然后打印DATA,好像它是一个R矢量   后续行。它们使用零NDATA,因此可以使用   单独打印标签。

我更了解C / C ++方面,我们肯定必须使用 subroutine dblepr(LABEL, NCHAR, DATA, NDATA) subroutine realpr(LABEL, NCHAR, DATA, NDATA) subroutine intpr (LABEL, NCHAR, DATA, NDATA) 等来使输出与R自己的输出流很好地配合。