PAYATHON 2026

如何让 Windows 上的 R 调用 WSL 中的 Infomap?

数据小许

结论

file.exists() 返回 TRUE,说明 Windows 可以通过 WSL 的 UNC 路径访问该文件,但不代表 Windows 上的 R 能直接启动它。//wsl$/Debian/home/tsobi/infomap-0.x/Infomap 是 Linux 程序,从 Windows R 调用时需要通过 wsl.exe 启动。

用包装脚本调用 Infomap

可以创建一个 Windows 批处理文件,例如 C:\tools\Infomap-wsl.cmd:

@echo off
wsl.exe --exec /home/tsobi/infomap-0.x/Infomap %*

然后在 R 中将包装脚本的路径传给 bin.path:

pathInfomap <- "C:/tools/Infomap-wsl.cmd"

GetMultiplexCommunities_Infomap(
  g.list,
  bin.path = pathInfomap,
  isDirected = isDirected,
  seed = 12345,
  includeSelfLinks = FALSE,
  numTrials = 100,
  twoLevel = TRUE,
  preclusterMultiplex = FALSE,
  addMissingPhysicalNodes = FALSE,
  hardPartitions = FALSE,
  verbose = TRUE,
  addAggregateAnalysis = TRUE,
  multilayerRelaxRate = 0.5,
  multilayerJSRelaxRate = NA,
  outputPrefix = "multimap_example"
)

%* 会将 muxViz 传给包装脚本的参数继续传给 Infomap。能否这样调用,取决于 GetMultiplexCommunities_Infomap() 如何构造并执行命令。如果它不支持 .cmd 文件,就需要调整调用方式,或改用 Windows 版 Infomap。

检查参数和文件路径

先在 Windows 命令行中确认包装脚本能启动 Infomap,再从 R 中运行相同的调用。同时检查 muxViz 传给程序的输入和输出路径。Windows 路径在 WSL 中未必能直接识别;必要时改用 WSL 可访问的路径,并确认 Debian 环境能看到相关文件。

问题中展示的 system() 调用只验证了 WSL 能启动 Infomap,不能证明 muxViz 能通过 bin.path 执行它。另一个细节是,所给缩短代码的输出以 Calculation Completed! 结束,表明那次运行已经完成。如果这段输出来自当前调用,就和“找不到”报错对不上;需要确认报错是否来自另一次运行或未展示的代码路径。

备注:内容仅供参考。