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

R Shiny DataTable显示[object Object]问题及特定字段提取需求

问题:在R Shiny DataTable中展示嵌套API数据并提取指定字段

API返回的数据输出

arthor_uuid rank score                                                                   smiles compound identifier                             
1 c8975496-4cb7-5fa6-a181-4044f1478eef    0 1.000 c1cc2cc(c(nc2c(c1)Cl)c3ccc[n+](c3)[O-])[C@@H](C(F)(F)F)Nc4c5c(cccn5)ncn4      AC000005306130
2 7b5b0d02-9b98-53dc-8366-08cb05f624bb    1 1.000  c1cc2cc(c(nc2c(c1)Cl)c3ccc[n+](c3)[O-])[C@H](C(F)(F)F)Nc4c5c(cccn5)ncn4      AC000005306132
                                                                                                                                                         vendor entries
1 GOSTAR, InChI, 3610820, LNLJHGXOFYUARS-NRFANRHFSA-N, false, false, 29-SEP-2022 10:39:33 +01:00, 29-SEP-2022 10:39:33 +01:00, Virtual, Virtual, Commercial, Commercial
2 GOSTAR, InChI, 3610727, LNLJHGXOFYUARS-OAQYLSRUSA-N, false, false, 29-SEP-2022 10:39:33 +01:00, 29-SEP-2022 10:39:33 +01:00, Virtual, Virtual, Commercial, Commercial

需求

想在R Shiny的DataTable中展示上述所有数据(包括vendor entries子集),但该列显示[object Object],[object Object]而非实际内容。若完整展示子集数据难度较大,至少要提取vendor entries中InChI对应的vendors identifier值(如LNLJHGXOFYUARS-NRFANRHFSA-N、LNLJHGXOFYUARS-OAQYLSRUSA-N)。

已尝试的方法

尝试1

filtered_data <- as.matrix(unlist(data["vendor entries"]))

处理结果:

[,1]                         
vendor entries.vendor name1         "GOSTAR"                     
vendor entries.vendor name2         "InChI"                      
vendor entries.vendors identifier1  "3610820"                    
vendor entries.vendors identifier2  "LNLJHGXOFYUARS-NRFANRHFSA-N"
vendor entries.discontinued1        "false"                      
vendor entries.discontinued2        "false"                      
vendor entries.timestamp1           "29-SEP-2022 10:39:33 +01:00"
vendor entries.timestamp2           "29-SEP-2022 10:39:33 +01:00"
vendor entries.source labels1       "Virtual"                    
vendor entries.source labels2       "Virtual"                    
vendor entries.compound categories1 "Commercial"                 
vendor entries.compound categories2 "Commercial"                 
vendor entries.vendor name1         "GOSTAR"                     
vendor entries.vendor name2         "InChI"                      
vendor entries.vendors identifier1  "3610727"                    
vendor entries.vendors identifier2  "LNLJHGXOFYUARS-OAQYLSRUSA-N"
vendor entries.discontinued1        "false"                      
vendor entries.discontinued2        "false"                      
vendor entries.timestamp1           "29-SEP-2022 10:39:33 +01:00"
vendor entries.timestamp2           "29-SEP-2022 10:39:33 +01:00"
vendor entries.source labels1       "Virtual"                    
vendor entries.source labels2       "Virtual"                    
vendor entries.compound categories1 "Commercial"                 
vendor entries.compound categories2 "Commercial"  

随后执行:

filtered_data["vendor entries.vendors identifier2"]

仅能显示vendor entries.vendors identifier2的第一个值,第二个值丢失,如何获取该字段的所有值?

尝试2

api_json <- jsonlite::toJSON(structure_data, pretty = TRUE)

得到的JSON结构如下:

[
  {
    "arthor_uuid": "c8975496-4cb7-5fa6-a181-4044f1478eef",
    "rank": 0,
    "score": "1.000",
    "smiles": "c1cc2cc(c(nc2c(c1)Cl)c3ccc[n+](c3)[O-])[C@@H](C(F)(F)F)Nc4c5c(cccn5)ncn4",
    "compound identifier": "AC000005306130",
    "vendor entries": [
      {
        "vendor name": "GOSTAR",
        "vendors identifier": "3610820",
        "discontinued": "false",
        "timestamp": "29-SEP-2022 10:39:33 +01:00",
        "source labels": ["Virtual"],
        "compound categories": ["Commercial"]
      },
      {
        "vendor name": "InChI",
        "vendors identifier": "LNLJHGXOFYUARS-NRFANRHFSA-N",
        "discontinued": "false",
        "timestamp": "29-SEP-2022 10:39:33 +01:00",
        "source labels": ["Virtual"],
        "compound categories": ["Commercial"]
      }
    ]
  },
  {
    "arthor_uuid": "7b5b0d02-9b98-53dc-8366-08cb05f624bb",
    "rank": 1,
    "score": "1.000",
    "smiles": "c1cc2cc(c(nc2c(c1)Cl)c3ccc[n+](c3)[O-])[C@H](C(F)(F)F)Nc4c5c(cccn5)ncn4",
    "compound identifier": "AC000005306132",
    "vendor entries": [
      {
        "vendor name": "GOSTAR",
        "vendors identifier": "3610727",
        "discontinued": "false",
        "timestamp": "29-SEP-2022 10:39:33 +01:00",
        "source labels": ["Virtual"],
        "compound categories": ["Commercial"]
      },
      {
        "vendor name": "InChI",
        "vendors identifier": "LNLJHGXOFYUARS-OAQYLSRUSA-N",
        "discontinued": "false",
        "timestamp": "29-SEP-2022 10:39:33 +01:00",
        "source labels": ["Virtual"],
        "compound categories": ["Commercial"]
      }
    ]
  }
] 

DataTable显示异常截图


解决方案

1. 提取InChI对应的vendors identifier

使用purrr包遍历每条数据,筛选出vendor name为InChI的条目并提取标识符:

library(purrr)
library(dplyr)

# 假设原始数据框为structure_data
structure_data <- structure_data %>%
  mutate(inchi_id = map_chr(`vendor entries`, function(vendors) {
    # 筛选InChI对应的vendor条目
    inchi_entry <- vendors[vendors$`vendor name` == "InChI"][[1]]
    # 返回对应的标识符
    inchi_entry$`vendors identifier`
  }))

执行后会在原始数据框中新增inchi_id列,直接在DataTable中展示即可。

2. 完整展示嵌套的vendor entries数据

方法一:展平数据框

将嵌套结构展开为扁平化数据框,每条vendor entry对应一行:

library(tidyr)

flattened_data <- structure_data %>%
  unnest_longer(`vendor entries`) %>%
  unnest_wider(`vendor entries`)

展平后的数据可直接用于DataTable展示。

方法二:格式化嵌套列文本

不改变数据结构,将嵌套对象转为可读字符串:

library(DT)

renderDataTable({
  datatable(structure_data) %>%
    formatStyle(`vendor entries`, 
                formatter = function(x) {
                  sapply(x, function(vendors) {
                    paste0(sapply(vendors, function(v) {
                      paste0(v$`vendor name`, ": ", v$`vendors identifier`)
                    }), collapse = "<br>")
                  })
                },
                escape = FALSE)
})

此方法会在DataTable的vendor entries列中,用换行展示每个vendor的名称和标识符,避免显示[object Object]。


内容的提问来源于stack exchange,提问作者AVE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:15:52