我试图创建一个使用此代码的R包: c code
我搜索了如何做到并尝试了以下方法:
1 - 使用内联包。
# orderer ####
#' Orderer
#'
#' @export
orderer <- function(associationPreprocessed){
if(!is.character(associationPreprocessed)){
stop("Error, the argument 'associationPreprocessed' must be of type 'character'")
}
code <- paste0(readLines("src/cfm-seriation.c"), collapse = "\n")
cfm <- inline::cfunction(signature(argc = "integer", argv = "character"),
body = code,
language = "C", convention = ".C",
libargs = c("-lm", "-lpthread", "-lrt"),
includes = c("#include <stdio.h>", "#include <time.h>",
"#include <math.h>", "#include <stdlib.h>",
"#include <string.h>"))
cfm(1L, paste0("f=", associationPreprocessed))
return (NULL)
}
我删除了c代码的所有标头信息以使用此代码段。
我们的想法是使用参数associationPreprocessed
传递数据的路径Escherichia coli。
2 - 使用.C()
函数调用main
,useDynLib(pkg)
动态加载.so
lib。与this thread的例子类似。
我相信我已经接近使用inline::cfuntion()
达到我的预期,但我仍然没有想出如何做我想做的事。
我见过的所有示例都使用简单的c代码,只有一个函数。