如何让 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! 结束,表明那次运行已经完成。如果这段输出来自当前调用,就和“找不到”报错对不上;需要确认报错是否来自另一次运行或未展示的代码路径。
备注:内容仅供参考。
