R包reticulate
有一个custom $
operator,它在等效的Python模块/对象中充当.
运算符。自$
cannot be evaluated的第二个参数以来,在这种情况下如何将参数传递给它?
reticulate
自述文件的示例用法是
library(reticulate)
os <- import("os")
os$chdir("tests")
os$getcwd()
我正在执行以下函数,其中...
将是具有零个或多个参数的python调用。
my_function <- function(python_object, ...)
python_object
必须是类python.builtin.object
或python.builtin.module
,并且参数需要作为字符传递,因为这些函数在全局环境中不存在。
例如
my_function(os, "chdir", "tests")
my_function(os, "getcwd")
my_function(r_to_py("my_string"), "lstrip", "my_")
我的想法与
有关do.call("chdir", list("tests"), envir = os)
或
reticulate:::`$.python.builtin.object`(os, eval(parse(text="chdir('tests')")))
然而这些都没有奏效。
答案 0 :(得分:2)
比我想象的要简单得多......
my_function <- function(python_module, attribute, ...) {
py_call(python_module[[attribute]], ...)
}
通常,$
是[[
的缩写。
<强>更新强>
@jjallaire指出......py_call是一个目前没有得到的低级函数 包装的好处(但肯定应该)。
要返回相同的输出(即继承正确的类)$
,请使用:
do.call(python_module[[attribute]], args = list(function_args))
python_module[[attribute]](function_args)
而不是py_call