gpt4 book ai didi

r - 使用 `testthat` 对写入/读取文件的函数或 Fortran 错误进行单元测试

转载 作者:行者123 更新时间:2023-12-05 07:40:26 24 4
gpt4 key购买 nike

使用 testthat 对读取和写入文件的函数进行单元测试的最佳方法是什么?

很抱歉问了一个复杂的问题,但我不确定这里出了什么问题。

我已经在 Fortran 中实现了很多函数,可以读取和写入文件。它们被编译在一个 R 包 cf 中。编写 R 扩展手册。我使用 testthat 进行的单元测试会生成随机内容,这些内容会使用 tempfile() 写入临时文件。在 R 包上运行 R CMD 检查可以在我的本地 Windows 机器上运行。

使用 R-devel 运行失败,因为它无法检测到 R-3.5.0 (devel) 的 Rtools。所以我提交给win-builder。

http://win-builder.r-project.org/但是失败并出现以下错误:

  At line 9 of file auxil.f95
Fortran runtime error: Actual string length is shorter than the declared one for dummy argument 'fn' (96/255)

与相应的 Fortran 源代码:

subroutine get_nlines(fn, nlines, stat) !line 9
implicit none

!! Arguments
character(255), intent(in) :: fn
integer, intent(out) :: nlines, stat

!! Local variables
character(len=1) :: one

nlines = 0
open(40, file=fn, status='OLD')
do
read(40, *, iostat=stat) one
if (stat /= 0) exit
nlines = nlines + 1
end do
close(40)

end subroutine

Fortran代码存放在R包的src子目录下,调用时用

get_nlines <- function(fn) {
stopifnot(file.exists(fn))
res <- .Fortran('get_nlines', fn=as.character(fn), nlines=integer(1), stat=integer(1))
if (res$nlines == 0 & res$stat != 0) {
warning(paste0('get_nlines did not read lines; IOSTAT error ', res$stat, '.'))
return(structure(NA, code=res$stat))
}
res$nlines
}

原来如此。不知道是我的Fortran代码写错了,还是win-builder服务器上出现的问题。

最佳答案

“我不知道我的 Fortran 代码是否有误” 从您的问题中,我仍然无法理解您所显示的代码是否是您的代码,或者它是否在内部您正在使用的一些 R 包。

如果它是您所说的 Fortran 代码(您没有显示任何其他内容),那么您应该尝试使用 character(*) 而不是 character(255),因为没有明显的理由要求确切的固定长度为 255。这正是错误消息所提示的,即 fn 不完全是您在 get_nlines() 中要求的 255 个字符

关于r - 使用 `testthat` 对写入/读取文件的函数或 Fortran 错误进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46180641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com