首页 > 解决方案 > 获取从 R 调用的 Matlab 中脚本的输出

问题描述

我正在尝试从 RStudio 在 Matlab 中调用一个非常简单的脚本。但是,每当我运行以下代码时,如果没有任何错误,它将返回 0 给我。请告诉我如何在 R 中调用 Matlab 脚本并获取它们的输出

run_matlab_script("C:/Users/XXX/Desktop/Sum.m", verbose = TRUE, desktop = FALSE, splash = FALSE, 
display = TRUE, wait = TRUE, single_thread = FALSE)

请注意,要使用上述功能,我在 r 中使用“ matlabr ”包。此外,我在 Matlab 中的简单脚本包括以下代码:

b=1+2

提前致谢!

标签: rmatlab

解决方案


matlab::run_matlab_script用来system调用matlab。截至今天,该功能(当前提交是c01d310)看起来像:

run_matlab_script = function(
  fname, 
  verbose = TRUE, 
  desktop = FALSE,
  splash = FALSE,
  display = FALSE,
  wait = TRUE,
  single_thread = FALSE,
  ...){
  stopifnot(file.exists(fname))
  matcmd = get_matlab(  
    desktop = desktop,
    splash = splash,
    display = display,
    wait = wait,
    single_thread = single_thread)
  cmd = paste0(' "', "try, run('", fname, "'); ",
               "catch err, disp(err.message); ", 
               "exit(1); end; exit(0);", '"')  
  cmd = paste0(matcmd, cmd)
  if (verbose) {
    message("Command run is:")
    message(cmd)
  }
  x <- system(cmd, wait = wait, ...)
  return(x)
}

值得注意的是(对我来说)run_matlab_script包含...在其形式中,并将其传递给system. 事实上,它的帮助文档特别说明了它的作用:

#' @param ... Options passed to \code{\link{system}}

因此,我们可以尝试通过查看system. 从?system,

  intern: a logical (not 'NA') which indicates whether to capture the
          output of the command as an R character vector.

这表明如果您将呼叫更改为

ret <- run_matlab_script("C:/Users/XXX/Desktop/Sum.m", verbose = TRUE, desktop = FALSE, 
                         splash = FALSE, display = TRUE, wait = TRUE, single_thread = FALSE,
                         intern = TRUE)

你会得到它的输出out


推荐阅读