禁止显示C++代码中由“printf”显示的消息,而不是R中的“message”或“warning”



就像这个问题一样,除了这个包的作者更令人烦恼,他正在使用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级别的print语句,但sprintf语句似乎不可行:

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

Zach,你有更多的上下文吗?你说的是CRAN软件包RPostgreSQL吗?我曾经为谷歌代码之夏指导过它,后来进行了维护(现在由Tomoaki Nishiyama非常能干),因为CRAN不允许根据《编写R扩展》第6.5节的规定使用实际的printfstd::cout

您通常可以联系到Tomoaki读取的r-sig-DB上的DB包的维护人员,我们也有rpostgresql的dedidated列表。Tomoaki反应很快,我建议使用合适的场地。通风不会有帮助。我只是因为你(错误地?)在上面贴了Rcpp标签才发现它。或者你是指Tim Keitt的(非常不同的)rpg,但却错误地引用了RPostgreSQL?

编辑:一些历史。我们从来没有合适的PostgreSQL后端。因此,建议将此作为谷歌代码之夏的主题,一名学生接受了它,并编写了第一个有点粗糙的版本。主要通过查看RMySQL的功能并适应PostgreSQL API。因为行为是由数据库接口DBI的R/S定义定义的。

因此,您似乎抱怨的是(在RPostgreSQL源中找到的第一个grep

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

因此,我可以相当肯定RMySQL也会这样做。假设这是一个编程用途,如果准备好的字符串(或者更确切地说,char向量),我认为实际上可以抑制它。

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

相关内容

最新更新