2017-11-14 98 views
5

Podczas korzystania z jednego poziomu listy/słownika dla parametryzacji dokument działa:Jak utworzyć wielopoziomowy słownik w metadanych YAML R Markdown?

--- 
params: 
    first_level: ~ 
--- 

```{r} 
params 
``` 

i dziewiarskich zwraca oczekiwane

## $first_level 
## NULL 

jestem w stanie używać listę wielopoziomową/słowniki jak drutach

--- 
params: 
    first_level: 
    second_level: ~ 
--- 

```{r} 
params 
``` 

produkuje Error: no value field specified for YAML parameter 'first_level' Execution halted, gdzie spodziewałbym

## $first_level 
## $first_level$second_level 
## NULL 

Czy rzeczywiście obsługiwana jest tylko jedna lista poziomów lub co robię?

Jak skomentował poniżej oczekiwany wynik można osiągnąć stosując

--- 
params: 
    first_level: !r list(second_level = NULL) 
--- 

```{r} 
params 
``` 

ale dlaczego używać yaml wtedy w ogóle zamiast bloku kodu Parametryzacja?

+1

Możesz po prostu użyć 2 poziomów, a nazwa drugiego poziomu musi mieć wartość "value". Spróbuj tego: 'params: first_level: value: ~'. Zmiana 'value' na' second_level' spowoduje błąd ... –

+0

Tworzenie zawartości 'first_level' na'! R list (second_level = NULL) 'daje to, czego chcę/oczekuję, ale pokonuje użycie' yaml' do zacznij od ... – balin

+1

Myślę, że jest to błąd w IDE RStudio (ponieważ działa 'rmarkdown :: render()'). Możesz go złożyć na https://github.com/rstudio/rstudio/issues. Dzięki! –

Odpowiedz

2

to specjalne pole dla R Markdown i musisz użyć jednego z dwóch sposobów określenia wartości parametru: jeśli wartość nie jest listą (np. Skalar), możesz ją określić za pomocą normalna składnia YAML; jednak jeśli jest to lista, R Markdown oczekuje pod-pola o nazwie value, a wartość musi być określona w tym podpole. W twoim przypadku, należy użyć value pole np

--- 
params: 
    first_level: 
    value: 
     second_level: ~ 
--- 

```{r} 
params 
``` 

który jest aktualnie by design.

+0

Dzięki za wskazanie tego - jakkolwiek niewygodne może być ... – balin