c - 抑制 C++ 代码中的 “printf” 而不是 R 中的 “message” 或 “warning” 显示的消息

标签 c r

like this question ,但这个包的作者更令人烦恼,并且使用 printfsnprintf 在 C/C++ 代码中显示消息、警告和错误的混合:

library('inline')
silly_developer_cxx_function <- cxxfunction(
  signature(x = "integer"),
  'printf("%s", "Seriously! Thanks for using my function!!");
  return ScalarReal(INTEGER(x)[0]);'
  )
silly_developer_function <- function(i){
  print("Thanks for using my function!!")
  return(silly_developer_cxx_function(as.integer(i)))
}

我可以使用capture.output抑制R级打印语句,但sprintf语句似乎无法杀死:

> capture.output(x <- silly_developer_function(1L), file='/dev/null')
Seriously! Thanks for using my function!!

最佳答案

扎克,你有更多背景信息吗?您是在谈论 CRAN 包 RPostgreSQL我曾经为 Google Summer of Code 提供指导,后来维护了它(现在由 Tomoaki Nishiyama 负责),因为 CRAN 不允许实际的 printfstd::coutSection 6.5 of Writing R Extensions .

您通常可以联系 Tomoaki 阅读的 r-sig-db 上的数据库包的维护者,并且我们也有(有?) rpostgresql 的专用列表。 Tomoaki 的 react 非常灵敏,我建议使用合适的 field 。通风没有帮助。我之所以发现它是因为你(错误地?)在上面粘贴了 Rcpp 标签。或者您是否偶然指的是(非常不同)rpg作者:Tim Keitt,但被错误地引用 RPostgreSQL相反?

编辑:一些历史记录。我们从来没有合适的 PostgreSQL 后端。因此建议将此作为 Google Summer of Code 的主题,一名学生接受了它并编写了第一个有点黑客的版本。主要是看看 RMySQL 做了什么并适应 PostgreSQL API。因为行为是由R/S定义的数据库接口(interface)——DBI来定义的。

所以你似乎提示的是(在 RPostgreSQL 源代码中找到的第一个 grep )

    (void) sprintf(buf, msg, (int) mgr->length);
    RS_DBI_errorMessage(buf, RS_DBI_ERROR);

因此我相当肯定 RMySQL 也会做同样的事情。鉴于这是一个编程使用,如果准备好的字符串(或者更确切地说,char vector ),我认为你实际上可以抑制它。

如果我是你,我会查看源代码和/或询问 r-sig-db。

关于c - 抑制 C++ 代码中的 “printf” 而不是 R 中的 “message” 或 “warning” 显示的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26660178/

相关文章:

r - 不同长度向量的箱线图

r - 如何在以逗号分隔的单引号之间拆分字符串?

r - 控制光栅图例高度

r - Rpart包生成的测试规则

c - 使用 C 程序压缩文件

c - 左移运算符是否取决于寄存器大小?

c - 有关于形状的事件吗?

c - 自动为 C 结构分配内存

c - 查找 seccomp 列入白名单的系统调用

r - 如何在 R 或 SPSS 中配对网络流量数据行?