在R中使用system2()运行编译的cpp文件

时间:2018-06-25 13:52:17

标签: r system2

我正在尝试使用system2()在R程序中运行已编译的cpp文件。 cpp的文档表明这只是一个大命令,所以我认为我不应该在sys2中使用stdout或stder选项。

  • 所需的network.nodes和network.edges文件位于/ files文件夹中
  • 我可以运行system2()行,但不输出任何内容
  • 我以前编译了socialrank.cpp,并使用Cygwin或cmd提示符将其放在/ exe文件夹中(g ++ -o socialrank socialrank.cpp)

指导:  -要运行算法,只需运行: ./socialrank summary_stats.txt图形名称> debug.log (您需要拥有文件graphname.nodes和graphname.edges)

我的代码(让我知道是否需要查看更多信息):

> nodelist %>% write_delim("./files/network.nodes", col_names = F)  
> edgelist %>% write_delim("./files/network.edges", col_names = F)
> #system("../exe/socialrank ../files/summary_stats.txt ../files/network")   #I think this code is for macs?? 
> system2("./exe/socialrank ./files/summary_stats.txt ./files/network") #Is this how you correct relative file directories for Windows?

因此没有任何内容输出到/ files文件夹。我无法确定CPP文件是否正在运行,不导出文件还是将其导出到其他地方?

如果您对编译,调用cpp程序或system2函数有任何建议,请告诉我。我也听说过sys和processx软件包,所以不确定是否有更好的方法来调用可能在操作系统之间有效的系统文件?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

documentation for system2给了我们两条信息:

  1. 我们需要指定要执行的commandargs作为单独的参数
  2. 默认情况下,system2的返回值是不可见的,它是我们执行的命令的状态代码。

第二点是您看不到任何输出的原因。 1 第一点是其首先不起作用的原因:您需要指定命令及其参数分别(并且参数必须是向量):

system2('./exe/socialrank', c('./files/summary_stats.txt', './files/network'))

这假定exefiles是当前工作目录的子目录(并且相应的文件位于这些位置)。

对于您来说,相同的命令适用于macOS,Windows和Linux。

无论如何,这与用法指南中给出的示例不太一样

./socialrank summary_stats.txt graphname > debug.log

…,因为在上面的命令中,输出未存储在debug.log文件中,而是发送到R控制台。这很少有用。通常,您希望将输出本身存储在R中的变量中。您可以通过将参数stdout = TRUE添加到system2调用中来实现。或者,指定stdout = 'debug.log'与上面的命令相同,即将输出存储在文件中。


1 实际上,在我的系统上,我仍然收到一条消息:“ […]命令未找到”。