我有一个Fortran77源代码,其中包含大量的表单打印命令:
写( fileID,label )
这个F77代码通过“RCMDSHLIBcode.f”编译成一个DLL,这个DLL从R.调用,如果在F77代码fileID中是一个常规文本文件,那么命令可以正常工作。但是,对于标准控制台输出,即fileID = 0,R创建一个"fort.0“临时文件,而不是在R控制台窗口中显示输出。
此问题仅在我的Windows 64位版本中发生。在Linux32位和64位下,fileID = 0的输出将正确地显示在控制台中。
我已经尝试了flush.console()命令。没有成功。
也许有人知道如何解决这个问题吗?不幸的是,在R中重写F77中的写(0,*)命令不是一种选择。
谢谢!
发布于 2016-03-08 02:35:58
您不应该在加载到R.中的扩展模块中使用本机打印方法,写R扩展有这样的说法:
6.5.1 FORTRAN的打印 在许多系统中,可以使用FORTRAN的“写”和“打印”语句,但是输出可能与C的输出不太好,而且在GUI界面上是不可见的。它们不是便携的,最好避免。 提供了三个子程序来简化FORTRAN代码的信息输出。 子例程dblepr(LABEL,NCHAR,DATA,NDATA)子例程realpr(LABEL,NCHAR,DATA,NDATA)子例程intpr (LABEL,NCHAR,DATA,NDATA) 这里的标签是最多255个字符的字符标签,NCHAR是它的长度(如果要使用整个标签,它可以是'-1‘),数据是长度的数组(至少是适当类型的NDATA )(分别是“双精度”、“实”和“整数”)。这些例程将标签打印在一行上,然后打印数据,就好像它是后续行上的R向量一样。它们与零NDATA一起工作,因此可以单独用于打印标签。
我更了解C/C++,在那里我们必须使用Rprintf()等,这样输出才能与R自己的输出流很好地配合。
https://stackoverflow.com/questions/35857857
复制相似问题