如何使用R调用c代码的主函数?
我正在尝试创建一个使用以下代码的R包: 我搜索了如何做到这一点,并尝试了以下方法: 1-使用内联包如何使用R调用c代码的主函数?,c,r,r-package,C,R,R Package,我正在尝试创建一个使用以下代码的R包: 我搜索了如何做到这一点,并尝试了以下方法: 1-使用内联包 # orderer #### #' Orderer #' #' @export orderer <- function(associationPreprocessed){ if(!is.character(associationPreprocessed)){ stop("Error, the argument 'associationPreprocessed' must b
# 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)
}
#订购方####
#“订购者
#'
#“@出口
订购者你的问题有很多要解决(你已经尝试了很多不同的事情)-但我注意到了一些事情。首先,根据需要,您需要去掉正文中的所有标题信息(因此,仅读取github源代码是行不通的)。我还认为这是相关的:“要在同一个库中声明多个函数,可以使用setCMethod
提供签名和实现的列表。在这种情况下,请在f
中提供定义方法的尽可能多的方法名。”对不起,我忘了描述这一点。我删除了c代码的头并手动添加它们作为inline::cfunction的includes参数。我将尝试将代码分解为多个函数并使用setCmethod,谢谢。祝你好运!这看起来确实是一项复杂的任务——我不知道如何解决有时需要使用多个中介函数来支持单个终端函数的问题。不过,为了解决标题中的问题-如果您查看答案和对答案的评论,您似乎不需要调用main()
来使用函数main()
函数在C语言中是特殊的。它是该语言的程序入口点,只能从包含可执行文件入口点的C运行时初始化代码中调用。您的R程序多久调用一次此代码?如果只有一次,那么就从R运行程序。在C中,我们称之为system()
或exec()
调用,R必须有一个等价的调用。你的问题有很多要解决(你尝试了许多不同的事情)-但我注意到了一些事情。首先,根据需要,您需要去掉正文中的所有标题信息(因此,仅读取github源代码是行不通的)。我还认为这是相关的:“要在同一个库中声明多个函数,可以使用setCMethod
提供签名和实现的列表。在这种情况下,请在f
中提供定义方法的尽可能多的方法名。”对不起,我忘了描述这一点。我删除了c代码的头并手动添加它们作为inline::cfunction的includes参数。我将尝试将代码分解为多个函数并使用setCmethod,谢谢。祝你好运!这看起来确实是一项复杂的任务——我不知道如何解决有时需要使用多个中介函数来支持单个终端函数的问题。不过,为了解决标题中的问题-如果您查看答案和对答案的评论,您似乎不需要调用main()
来使用函数main()
函数在C语言中是特殊的。它是该语言的程序入口点,只能从包含可执行文件入口点的C运行时初始化代码中调用。您的R程序多久调用一次此代码?如果只有一次,那么就从R运行程序。在C中,我们称之为system()
或exec()
调用,R必须有一个等价的。