You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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依赖
    anndata R包依赖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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:45:19