system()或使用shell()它们动态加载它们是不好的做法吗?在R会话中,我想创建一个函数
调用模板C源文件template.tmp,让它看起来像:
...
#define VAR
...
Run Code Online (Sandbox Code Playgroud)
(我不打算实际编译template.tmp,因此.tmp文件扩展名.我只是用它作为模板创建其他源文件,只有#define指令发生变化.)
下面是我创建的R函数,用于执行上述步骤.为简单起见,我删除了代码行,这些代码声明了正确的路径名,或者为Windows和其他类似的Unix添加了可移植性.
myfunc <- function(val){
# create commands for system()
subst_cmd <- paste0("sed 's/define VAR/define VAR ", val, "/' template.tmp > newprog.c")
shlib_cmd <- paste0("R CMD SHLIB newprog.c")
# submit commands to system()
system(subst_cmd)
system(shlib_cmd)
# dynamically load shared library
dyn.load(newprog.so)
}
Run Code Online (Sandbox Code Playgroud)
因此,myfunc(12345)将使用以下行创建新的C源文件,并将其编译为共享库并将其动态加载到当前R会话中.
...
#define VAR 12345
...
Run Code Online (Sandbox Code Playgroud)
我有一个功能,其中速度非常重要,因为该功能可以被调用数千次.与使用#define …
对于xPython中列表中的每个连续或更多的零运行,我想在运行中除了x它们之外全部为零.如果x = 0,则删除全部为零.
我在考虑一个Python函数,它将列表L和数字x作为输入.
例如,让我们L = [7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 0, 8].
x = 0,那么回来L = [7, 12, 2, 27, 10, 8]x = 1,那么回来L = [7, 0, 12, 0, 2, 0, 27, 10, 0, 8]x = 2,那么回来L = [7, 0, 12, 0, 0, 2, 0, 0, 27, …对于xC++列表中每次运行或连续的零,我想删除运行中的所有零,除了x它们.如果x = 0,则删除全部为零.
我在考虑一个C++函数,它将一个列表list<int> L和一个数字int x作为输入.
例如,让我们L = {7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 0, 8}.
x = 0,那么回来L = {7, 12, 2, 27, 10, 8}x = 1,那么回来L = {7, 0, 12, 0, 2, 0, 27, 10, 0, 8}x = 2,那么回来L = {7, 0, 12, 0, 0, 2, 0, …