R中的Fortran格式?
我有一个不同值的列表,需要在Fortran90代码中以特定的方式格式化 F90文件按以下格式读入输入文件:R中的Fortran格式?,r,format,R,Format,我有一个不同值的列表,需要在Fortran90代码中以特定的方式格式化 F90文件按以下格式读入输入文件: '5E16.8' 表示5列,用科学符号表示,总列宽为16位,小数点后8位 此类输入文件的典型行如下所示: -8.68914773E-03-5.94151619E-03 2.34059840E-04-2.76737270E-03-4.90334584E-03 请注意,负号占用总宽度的额外空间,值的长度固定在小数位数上 在R中,我如何格式化列表/矩阵中的字符串和值 示例矩阵: m <-
'5E16.8'
表示5列,用科学符号表示,总列宽为16位,小数点后8位
此类输入文件的典型行如下所示:
-8.68914773E-03-5.94151619E-03 2.34059840E-04-2.76737270E-03-4.90334584E-03
请注意,负号占用总宽度的额外空间,值的长度固定在小数位数上
在R中,我如何格式化列表/矩阵中的字符串和值
示例矩阵:
m <- matrix(c(1, 2, 3, -1, -2, -3, 0.5, 3.9, -40, 120))
这似乎非常接近:
(ss不知道,但是你读过?sprintf
吗?到目前为止,我已经看过cat/sprintf/write了,但是运气不好。问题通常是负号被添加为额外字符,导致间距混乱sprintf(“%16.8e”,m)
加上一些gsub()
将e+
转换为e
?(1)您的第三列是E0
,而不是E00
,这是有意的吗?(2)对于大小不同的数字,我的示例看起来与您的匹配,除了0.5(呈现为5.00000…e-01
)在打印.1e-101
这样的值的方式上存在差异?在Fortran和E16.8
中,我们期望0.10000000-100
这样的值,我怀疑这在这个R中不需要付出更多努力就不会发生。有趣的是,我非常确定sprintf
将进入C库进行定义ion,所以这将是C/Fortran(而不是R/Fortran)的区别…?我在sprintf
中没有看到任何看起来有用的东西(认为#
可以做到,但显然不行)。C/Fortran的东西可能会引起更广泛的观众的兴趣(即比R程序员更广泛的人…)谢谢你的帮助Ben,它工作得很好:)我的值进入最大10负指数,所以我不需要担心
1.00000000E+00 2.00000000E+00 3.00000000E+00 -1.00000000E+00 -2.00000000E+00
-3.00000000E+00 0.50000000E+00 3.90000000E+00 -4.00000000E+01 1.20000000E+02