我有一个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,*)命令不是一种选择。
谢谢!
答案 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自己的输出流很好地配合。