gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:26:45 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com