就像这个问题一样,除了这个包的作者更令人烦恼,他正在使用printf
和snprintf
在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节的规定使用实际的printf
或std::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。