如何从 R 调用 Fortran 程序

2024-03-11

我对 Fortran 完全陌生,但对 R 很熟悉。 我得到了一个巨大的 Fortran 程序,其中包含大约 30 个子例程和大约 15 个函数以及许多其他代码行。 有人告诉我需要从R中调用Fortran程序。我一直在网上寻找方法 在 R 和 Fortran 之间建立这座桥梁,但收效甚微。 我可以从命令行成功执行 Fortran exe 文件并创建所需的输出。 Fortran 文件名为“FortFish.f”

一个问题:

从 R 中,我是调用 Fortran 程序还是必须单独调用 Fortran 函数和子例程?

从 R 中,我是否像这样调用整个 Fortran 程序?:R CMD SHLIB FortFish.f 然后使用: dyn.load("FortFish.so")

如果我无法立即运行整个 Fortran 程序,我将根据要求发布几个小的 Fortran 函数和子例程。 有谁有使用 R 和 Fortran 的运行示例可以分享吗?

我的 Fortran 代码非常大,否则我会把它贴在这里。 谢谢。


我看到三种可能性:

  1. 您单独编译Fortran程序,并用R函数调用它system()。您必须以该程序可以读取的格式通过文件传递数据。

  2. 您编译一个从 R 加载的 DLLdyn.load(),然后调用 Fortran 函数.Fortran()。您可以轻松传递数值数据(标量、向量或数组),但字符串数据更难处理。数组是copied.

  3. 这种调用 DLL 函数的机制被认为过于简单,现在.Call()是首选,但要使用.Call()你必须编写 C 包装器。

我将举第二种可能性的例子。 考虑 Fortran 中的一个子例程,它通过 Horner 算法计算多项式:

subroutine horner(n, a, x, y)
    implicit none
    integer :: n, i
    double precision :: a(n), x, y

    y = a(n)
    do i = n - 1, 1, -1
        y = y * x + a(i)
    end do
end subroutine

从命令行编译:

R CMD SHLIB horner.f90

从 R 调用它:

dyn.load("horner.dll")

horner <- function(a, x) {
  .Fortran("horner", as.integer(length(a)), a, x, y=0)$y
}

horner(c(-2, 0, 1), 1.414)

如果您希望 Fortran 子例程将某些内容打印到 RStudio 控制台,您需要执行以下操作(至少在 Windows 上):

Sys.unsetenv("GFORTRAN_STDOUT_UNIT")
Sys.unsetenv("GFORTRAN_STDERR_UNIT")

这确实是一个微不足道的例子,更复杂的程序将需要更多的工作,但你明白了。


如果您的 Fortran 程序是独立的(它有一个“程序”单元,并且应该编译为从命令行调用的可执行文件),并且如果您是 Fortran 新手,我建议坚持第一个选择,这将变得简单得多。这就是seasonal https://cran.r-project.org/web/packages/seasonal/打包的作用:调用 Census 的可执行文件X13AS https://www.census.gov/srd/www/x13as/从 R 内部。可执行文件位于x13二进制 https://cran.r-project.org/web/packages/x13binary/包裹。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 R 调用 Fortran 程序 的相关文章

  • 带有用户输入的knitr

    我正在使用 R markdown 并使用 Rstudio 来 Knit 我有以下 R markdown 文件 title Untitled author date output html document r setup include F
  • 用于清除工作空间和转储存储的 R 全局函数

    我希望创建一个全局函数来清除我的工作区并转储我的内存 我将我的函数称为 cleaner 并希望它执行以下代码 remove list ls gc 我尝试在全局环境中创建该函数 但是当我运行它时 控制台仅打印该函数的文本 在我要获取的函数文件
  • R-了解 akima::interp 结果中的 NA 值

    我有以下数据框 ref dat k Intensity Slope 1 0 021467214 33 16 2 0 012444759 33 8 3 0 006079156 33 4 4 0 003792025 33 2 5 0 02276
  • 将值替换为其各自列的名称

    我有一个数据框 Code 401k CVS 101A true 231N true FD54 true 99JB 85F4 true 我试图用相应的列名称 例如 401k 替换 true 字符值 这是我想要的输出 Code 401k CVS
  • 使用 R 的 flextable 包时,有没有办法将传递给 add_header_lines() 的字符串部分加粗

    我正在使用我喜欢的 flextable 包为 Word 文档创建几个表格 但是 我在将表格标题中的部分文本加粗时遇到了一些麻烦 例如 我希望标题为 Table 1 我的表格标题的其余部分 而不是 表 1 我的表格标题的其余部分 I 找到这个
  • 如何使用 R 中带引号的字符值内的序列读取 CSV?

    这是一个包含两个字符列的 CSV 文件 key value a 所有字符值都用双引号引起来 并且有一个顺序 在值之一内 转义引号加分隔符 我无法通过 read csv readr 中的 read csv 或 data table 中的 fr
  • ggplot 中的错误问题:“grid.Call(”L_textBounds“, as.graphicsAnnot(x$label), x$x, x$y, … 中的错误”[重复]

    这个问题在这里已经有答案了 我试图在 ggplot 中制作一个条形图 其中我通过强制其中一些标签为长度为零的字符串 即 来指定要显示的标签 但是 我收到错误 Error in grid Call L textBounds as graphi
  • 限制数据框中所有单元格的字符串长度?

    您好 有没有一种方法可以限制 data frame 中所有列的字符串文本大小 而不必循环遍历每一列并一次使用 str trunc 之类的东西 例如下面的数据框 我可以将所有文本大小限制为仅 5 个字符 而不必一次只执行一列吗 如果有 50
  • R:将 readRDS 应用于 .Rds 文件名的列表对象

    我有几个包含数据帧对象的 Rds 文件 我想对每个文件应用一个函数并将数据帧绑定到单个数据帧中 但是 当我尝试从文件名列表中读取多个 Rds 文件时 我收到错误 FUN X i 中的错误 从连接读取时出错 readRDS 不适用于列表吗 R
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • 如何将此“for”循环转换为向量解

    这个问题与 将嵌入其他文本的长州名称转换为两个字母的州缩写 https stackoverflow com questions 25582518 convert long state names embedded with other te
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • 在 R 中使用 Huggingface Transformer 模型

    我正在尝试在 R 中使用不同的 Huggingface 模型 这是通过 reticulate 导入 Transformer 包来实现的 谢谢 https rpubs com eR ic transfoRmers https rpubs co
  • 如何在R中同时对三个字段进行网络分析

    如何在 R 中同时对三个字段进行网络分析 下面是示例数据以及desired output在最后一栏中 df lt data frame stringsAsFactors FALSE id 1 c ABC ABC BCD CDE DEF EF
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY
  • 单击 R 中的 Sankey Chart 线时添加额外的标签值

    以下 R 闪亮脚本创建一个桑基图 如下面的快照所示 我的要求是 当我单击左右节点之间的任何链接 即 a1 和 a2 时 我希望相应的 a3 的总和出现在标签中 例如 a1 中的 A 和 a2 中的 E 总共具有值 50 和 32 因此 我想

随机推荐

  • 如何在 git 存储库的特定状态下显示文件的内容?

    我想显示 git 存储库特定状态下的路径给出的文件的内容 我没有成功尝试这个 git show f825334150cd4bc8f46656b2daa8fa1e92f7796d Katana source Git GitLocalBranc
  • 如何使用 IEnumerable<> 类型创建 CodeFunction2?

    我确实需要创建如下所示的内容 我正在构建 2 个类 第一个类是名称为 tableNameAsSingular 即 AddressEntity 的类 在我的第二个工作类中 我需要具有如下所示的内容 public IEnumerable
  • 计时器和 JFrame 错误

    我正在制作一个带有计时器和 JFrame 的游戏 以及许多其他东西 但只有这两个会引起问题 在运行下面的片段后 我收到了一个奇怪的错误 至少对于之前从未使用过这些类的我来说是这样 开始执行这个 private static GameView
  • Java 使用 Math.ceil 向上舍入为 int

    int total int Math ceil 157 32 为什么它仍然返回4 157 32 4 90625 我需要四舍五入 我环顾四周 这似乎是正确的方法 I tried total as double输入 但得到 4 0 我究竟做错了
  • 查找一组字符串中 K 个最长的公共后缀

    我想在一组字符串中找到最长的常见后缀 以检测我的自然语言处理项目中的一些潜在的重要语素 给定频率K gt 2 在字符串列表中找到K个最常见的最长后缀S1 S2 S3 SN 为了简化问题 这里举一些例子 Input1 K 2 S firema
  • 确定按下“Backspace”按钮

    How to determine in GWT that user pressed Backspace button I tried this but it does not work Override public void onKeyP
  • zip mime 类型,何时选择哪一种

    到目前为止 对于 Zip 文件的 Mime 类型 我已经看到 应用程序 八位字节流 多部分 x zip 应用程序 zip 应用程序 zip压缩 应用程序 x zip 压缩 我想我的问题是哪个是 最好的 为什么 为什么有这么多选择 我使用 w
  • System.Timers.Timer Elapsed 事件在调用timer.Stop()后执行

    背景 我有一个计时器 用于跟踪自串行端口数据接收事件被触发以来已经过去了多长时间 我正在为此创建自己的解决方案 而不是使用内置的超时事件 因为我正在获取连续的数据流 而不是发送查询并获取一个响应 问题 在 DataReceived 处理程序
  • HTML - 给定一个表格,如何在不破坏布局的情况下允许一列流动

    我有以下内容 div style width 100 table tr td style width 30px hi td td style width 40px hi td td style width 1 LOTS Of text in
  • whitespaceAndNewlineCharacterSet() 中有哪些字符?

    我正在解析一些讨厌的文件 你知道 在一个文件中混合逗号 空格和制表符分隔符单线 然后通过文本编辑器运行它 该编辑器会在第 65 列用 CRLF 换行 啊 作为我在 Cocoa 中解析此内容的努力的一部分 我使用 Apple 的whitesp
  • 验证传递给 Mock 的参数是否按预期设置的正确方法

    如果您稍后验证调用了这些方法 是否可以在回调中进行断言 这是确保我的模拟获得传递给它的预期参数的首选方法 还是应该在回调中设置局部变量并在该实例上执行断言 我遇到的情况是 Presenter 类中有一些逻辑 它根据输入派生值并将它们传递给
  • 在 R 中使用 persp3D 函数时,如何向轴标签添加下标?

    I am trying to define my z axis label as R0 in plot3D below are my code I am using expression for my zlab but I get the
  • 错误:文件已加密或不是数据库

    我使用 PHP 创建了一个带有表的数据库 我通过以下方式做到了 从命令行执行 PHP 文件 php test php 后 我在目录中得到一个名为 test db 的新文件 这就是我想要的 然后 在命令行中 我输入 sqlite3 test
  • em 与 px...针对移动浏览器

    对于桌面浏览器 所有现代浏览器都使用缩放功能 因此我们可以使用 PX 但如果可以在移动设备上看到相同的站点 那么 px 不适合在移动浏览器中缩放 或者使用 px 对于移动浏览器也很好 即使我们不关心 IE 6 如果我们不为移动设备制作不同的
  • 如何在cassandra中构建范围查询?

    CREATE TABLE users userID uuid firstname text lastname text state text zip int age int PRIMARY KEY userID 我想构造以下查询 selec
  • 独立 Java SE 应用程序的项目目录结构是什么?

    独立 Java SE 基于命令行 应用程序的标准项目目录结构是什么 src文件夹将包含我的所有 java正确组织的包中的文件 除此之外我还有bin文件夹将包含我的 class files 我的项目中有属性文件和 XML 配置文件 我应该将它
  • 使用 .htaccess 通过 index.php 重新路由除一组特定请求之外的所有请求

    所以我只是继承了一个网站 我想做的第一件事是构建一个漂亮的小标准 简单易用的 CMS 允许使用任何 URL 创建页面 例如 whatever html 因此 如果用户点击 example com whatever html 它应该获取wha
  • Android Webview - 当用户滚动时检测标题名称

    我有这种模式的 html 文件 a a h2 First Heading h2 a Some Text goes here a br br a a h2 Second Heading h2 Some Text goes here br br
  • 如何在 C++ 中将成员变量指针转换为泛型类型

    我的应用程序中有与此类似的代码 class A public int b class C public int d void DoThings void arg1 MYSTERYTYPE arg2 A obj a C obj c DoThi
  • 如何从 R 调用 Fortran 程序

    我对 Fortran 完全陌生 但对 R 很熟悉 我得到了一个巨大的 Fortran 程序 其中包含大约 30 个子例程和大约 15 个函数以及许多其他代码行 有人告诉我需要从R中调用Fortran程序 我一直在网上寻找方法 在 R 和 F