将R对象传递到Quarto中的Observable

4
我将尝试使用 R 和 Observable 在 Quarto 文档中进行交互,具体请参考:https://quarto.org/docs/interactive/ojs/。据我所知,我们需要使用 ojs_define 函数来将数据传递给 Observable。因此,对于下面的示例,我将使用 palmerpenguins::penguins_raw 进行尝试:
---
title: "Untitled"
format: html
---

```{r}
ojs_define(data = palmerpenguins::penguins_raw)
```


```{ojs}
viewof bill_length_min = Inputs.range(
  [32, 50], 
  {value: 35, step: 1, label: "Bill length (min):"}
)
viewof islands = Inputs.checkbox(
  ["Torgersen", "Biscoe", "Dream"], 
  { value: ["Torgersen", "Biscoe"], 
    label: "Islands:"
  }
)
```


```{ojs}
filtered = data.filter(function(penguin) {
  return bill_length_min < penguin.bill_length_mm &&
         islands.includes(penguin.island);
})
```

```{ojs}
Plot.rectY(filtered, 
  Plot.binX(
    {y: "count"}, 
    {x: "body_mass_g", fill: "species", thresholds: 20}
  ))
  .plot({
    facet: {
      data: filtered,
      x: "sex",
      y: "species",
      marginRight: 80
    },
    marks: [
      Plot.frame(),
    ]
  }
)
```

但是当我渲染时,出现了这些类型的错误:https://istack.dev59.com/F09CA.webp 有什么想法可能是我在这里做错了吗?
1个回答

5

有几件事情需要注意,

首先,您正在使用palmerpenguins::penguins_raw数据,该数据没有列名为bill_length_minbill_length_mm。或许您想要使用palmerpenguins::penguins

其次,在ojs代码块中进行筛选操作之前,需要对数据进行transpose(data)处理。因为根据文档

Plot函数期望按行而不是按列提供数据,所以我们在筛选前进行transpose()操作


---
title: "Untitled"
format: html
---

```{r}
ojs_define(data = palmerpenguins::penguins)
```


```{ojs}
viewof bill_length_min = Inputs.range(
  [32, 50],
  {value: 35, step: 1, label: "Bill length (min):"}
)
viewof islands = Inputs.checkbox(
  ["Torgersen", "Biscoe", "Dream"],
  { value: ["Torgersen", "Biscoe"],
    label: "Islands:"
  }
)
```


```{ojs}
filtered = transpose(data).filter(function(penguin) {
  return bill_length_min < penguin.bill_length_mm &&
         islands.includes(penguin.island);
})
```

```{ojs}
Plot.rectY(filtered,
  Plot.binX(
    {y: "count"},
    {x: "body_mass_g", fill: "species", thresholds: 20}
  ))
  .plot({
    facet: {
      data: filtered,
      x: "sex",
      y: "species",
      marginRight: 80
    },
    marks: [
      Plot.frame(),
    ]
  }
)
```



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接