在R中访问ref_anndata$obs报错:Expected a python object, received a character
问题
在R中使用anndata包读取h5ad文件,执行代码:
ref_anndata <- anndata::read_h5ad("/Fetal_nephron.h5ad")
查看对象时显示已正常加载:
ref_anndata #> AnnData object with n_obs × n_vars = 10790 × 33694 #> obs: 'Barcode', 'Short_Sample', 'Experiment', 'Gender', 'Age', 'Stage', 'Selection', 'celltype', 'compartment' #> var: 'ID' #> obsm: 'X_umap
但访问ref_anndata$obs时触发报错:Error: Expected a python object, received a character
解决方法
检查Python环境与anndata依赖
anndataR包依赖reticulate调用Python版的anndata,先确认当前R会话关联的Python环境已安装anndata:library(reticulate) # 检查anndata是否可用 py_module_available("anndata")如果返回
FALSE,需要切换到装有anndata的Python环境,比如:# 使用conda环境示例 use_condaenv("your_conda_env_name", required = TRUE) # 或指定Python路径 use_python("/path/to/python/with/anndata", required = TRUE)重启R会话后重新加载包并读取文件。
使用官方提供的访问函数
R版anndata的对象不能直接用$obs访问(这是Python的属性访问逻辑),需要用包内置的obs()函数来提取观测数据:# 方式1:直接调用函数 obs_df <- anndata::obs(ref_anndata) # 方式2:管道调用 library(magrittr) obs_df <- ref_anndata %>% anndata::obs()排查文件完整性
如果以上方法无效,先在Python中验证h5ad文件本身是否正常:import anndata adata = anndata.read_h5ad("/Fetal_nephron.h5ad") print(adata.obs.head())若Python中能正常读取,回到R中重点检查reticulate的环境配置;若Python中也报错,说明文件可能损坏,需要重新获取或修复文件。
内容的提问来源于stack exchange,提问作者Sara Perez
相关产品推荐
相关产品推荐

