如何通过py_run_string访问含特殊命名的R对象(CRAN合规)
解决方案
1. 处理Python不兼容的R对象命名
R中带.的对象名(如bad.NameObject)无法通过Python的r.bad.NameObject语法访问,因为Python会将.解析为属性访问。直接使用R的get()函数在Python代码中动态获取对象即可解决:
library(reticulate) goodNameObject = c(10,9,8,7) bad.NameObject = c(1,2,3,4) # 正确访问特殊命名对象 reticulate::py_run_string("print(r.get('bad.NameObject'))")
此方法无需修改用户原对象,也不在全局环境创建新变量,符合CRAN规范。
2. 访问自定义cacheEnv中的对象
通过get()函数的envir参数指定目标环境,直接从自定义环境中读取对象,无需将对象复制到全局环境:
library(reticulate) # 创建自定义环境并添加对象 cacheEnv <- new.env() cacheEnv$user_cached_data <- c(5,6,7,8) # Python端访问自定义环境中的对象 reticulate::py_run_string("print(r.get('user_cached_data', envir=r.cacheEnv))")
合规性说明
以上方案均未操作全局环境(如创建全局变量),完全满足CRAN对包的审核要求,不会因环境操作问题被拒。
内容的提问来源于stack exchange,提问作者Adam Fleischhacker
相关产品推荐
相关产品推荐

