![](/img/trans.png)
[英]Same R function works as function/object in Global Env, does not work when loaded from R package
[英]Use dynamically loaded dlls from package function in global environment in R
我有一個名為“aaa”的 package,它有一個 function,例如:
execute_query = function(arg1,symbol_list){eval(.Call("run_query",arg1),
envir = .GlobalEnv)}
這里的run_query部分由一個dll提供,它已經在functions.onLoad function中加載到全局環境中:
eval(dyn.load(file.path(dll_path,"liblib.dll")),envir =.GlobalEnv)
這是成功的,當我使用getLoadedDLLs()
function 時,我得到了這個 dll。
如果我將 function 復制粘貼到 package 之外,則一切正常。 但是,在嘗試從 package 執行 execute_query 時,我收到錯誤消息:
Error in .Call("run_query", arg1) :
"run_query" not resolved from current namespace (aaa)
我猜想在引用鏈接的 dll 時 eval 不起作用。 如何從 package ZC1C425268E68385D1AB5074 F 全局命名空間中運行 dll function
我已經嘗試使用library.dynam
注冊 package,但考慮到 dll 都是大型外部應用程序的一部分,我不能將它直接放入 package 中,這將不起作用。 我可以硬編碼一個 dll 路徑到 package 所以我寧願一個粗略的解決方案,比如在全局命名空間中執行所有內容,如果這可以解決問題。
這里的答案是將要執行的 function 分配到全局命名空間中。 因此我們這樣做:
execute_query = function(arg1,symbol_list){eval(.Call("run_query",arg1),
envir = .GlobalEnv)}
assign("execute_query", execute_query, envir = .GlobalEnv)
然后可以從 package function 或任何其他 function 調用此execute_query
。
它並不出色,永遠不會在 CRAN 上飛行,但它確實可以在 package 中使用外部 dll。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.