是否可以列出可以通过`.Call()`加载的所有可用名称?.Call(“ function”)中的错误

ShanZhengYang

关于C ++ / R或C / R软件包集成,关于StackOverflow的一个非常常见的问题是关于中的错误dyn.load(),例如

> ## within R
> Error in .Call("function_c") : C symbol name "function_c" not in load table

因此function_c在C中有一些函数

SEXP function_c() {
  Rprintf("Hello World!\n"); // manually changed
  return(R_NilValue);
}

由于许多类型的错误(例如错误的拼写,函数的命名错误,用户未使用extern "C"Cpp代码等)而导致出现此错误

问题:有什么方法可以查看用户dyn.load()在编译后可以通过其加载的所有“可用”对象

迈克尔·奇里科

接下来呢?我不确定它是否涵盖了所有内容,但应该接近:

# manipulate search() to get all loaded packages
loadedPkgs = grep('^package:', search(), value = TRUE)
loadedPkgs = gsub('package:', '', loadedPkgs, fixed = TRUE)
# add names here to make the results of lapply pretty
names(loadedPkgs) = loadedPkgs

allCRoutines = lapply(loadedPkgs, function(pkg) {
  # see: https://stackoverflow.com/questions/8696158/
  pkg_env = asNamespace(pkg)
  # this works at a glance
  check_CRoutine = function(vname) {
    'CallRoutine' %in% attr(get(vname, envir = pkg_env), 'class')
  }
  names(which(sapply(ls(envir = pkg_env, all = TRUE), check_CRoutine)))
})

该对象有点长,所以我只显示一个包:

allCRoutines[['utils']]
# $utils
#  [1] "C_crc64"         "C_flushconsole"  "C_menu"          "C_nsl"           "C_objectSize"    "C_octsize"       "C_processevents"
#  [8] "C_sockclose"     "C_sockconnect"   "C_socklisten"    "C_sockopen"      "C_sockread"      "C_sockwrite"  

我不确定是否能check_CRoutine捕获到我们认为与您的问题相关的所有信息。我也不确定这是否符合您的主要兴趣(这些对象是否可以成功地馈入dyn.load);也许这里返回的例程可以通过包装器传递给dyn.loadtry

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以通过 REST API 列出 Azure 中的所有数据库

是否可以列出模块中的所有功能?

在tmux中,是否可以列出所有窗口中的所有窗格?

在tmux中,是否可以列出所有窗口中的所有窗格?

在Delphi中是否可以像在Python中使用__call __()方法那样具有可调用对象?

是否可以在psql中的查询或事务中列出所有受影响的行?

是否可以从SQL Server列出TFS组中的所有用户

在Java 9中是否可以通过模块名称获得服务?

是否可以通过Google表格中的名称链接数据?

可以在CMD中对CALL使用通配符吗?

是否可以在派生Generic的记录数据类型中列出字段的名称和类型?

我可以列出Visual Studio解决方案中的所有*不可用*项目吗?

是否可以通过这种方式检查2d数组中的所有元素是否相同?

在iOS中,是否可以使用Call Directory Extension阻止无呼叫者ID?

是否可以在R中(或使用Rprintf())“抓取” /“擦除” C printf()的.Call()输出?

是否可以在另一个Meteor.call中调用方法?

Python中是否有一个函数可以列出特定对象的属性和方法?

是否有Google(REST)API可以列出Google Apps帐户中的管理员角色?

是否有一种算法可以列出文件夹中的所有文件(对于 C#)?

是否可以列出存储在组中的频道?

是否可以在bash中列出磁盘列表?

Google Directory API:是否可以在一个请求中列出所有的组成员关系?

是否可以通过单击将书签添加书签并关闭Chrome中的所有标签?

是否可以通过 PageRoute 或 Razor 页面中的约定匹配所有子目录?

是否可以通过Dynamics Nav 2016中的ODATA查询所有公司

在 Angular 中,是否可以根据用户是否通过身份验证加载不同的模块?

是否可以在Firestore Cloud Function中获取所有文档?

我可以列出水豚中的所有场景吗?

您是否可以将多个可执行脚本放在一个目录中,并通过采购该目录使所有这些命令可用?