Как использовать оператор if else в параметрах фрагмента r, чтобы заменить отсутствующее изображение изображением по умолчанию

avatar
Sanam
1 июля 2021 в 17:23
35
1
0
title: File Reading
output: html_document
params:
  user1: "C:/Users/myDir/Desktop/apples.jpeg"
  user2:  "C:/Users/myDir/Desktop/oranges.jpeg"

Допустим, у меня есть следующие пути к файлам, установленные в params в файле Rmardown. Теперь я устанавливаю отдельный чанк для каждого файла следующим образом:

```{r}
image_read(params$user1)
```

```{r}
image_read(params$user2)
```

Теперь допустим, я хочу связать документ, но путь, который я указал для пользователя2, недоступен. Поэтому я обновил свои фрагменты и добавил следующее, поэтому, если путь недоступен или неверен, фрагмент не оценивается.

```{r, eval = file.exists(params$user2)}
image_read(params$user2)

Что я хочу сделать, так это каким-то образом указать, что если файл не существует, а затем загрузить другое изображение по пути по умолчанию, который я указал в отдельном фрагменте в верхней части моего файла

```{r}
default_image <- "C:/Users/myDir/Desktop/default.jpeg"
```

По сути, каждый раз, когда путь к файлу отсутствует, я хочу заменить его этим изображением по умолчанию. Будем признательны за любую помощь

Источник

Ответы (1)

avatar
Marcelo Avila
2 июля 2021 в 11:46
1

В этом случае простой оператор if-else решит эту проблему. Если вы собираетесь запускать его несколько раз, возможно, стоит упаковать его в функцию.

---
title: "test conditional chunks"
output: html_document
params: 
  user1: "C:/Users/blah/Desktop/Discrete-event-simulation-concepts.png"
  user2: "C:/Users/blah/Desktop/Discrete-event-simulation-concepts5.png"
  default: "path_to_default"
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r}
library(magick)
```


```{r}
# basic example
if (file.exists(params$user1)) {
  image_read(params$user1)
} else {
  image_read(params$default)
}
```


```{r}
# packing into a function
image_read_with_default <- function(path, ...) {
  if (file.exists(params$user1)) {
    img <- magick::image_read(params$user1, ...)
  } else {
    img <- magick::image_read(params$default, ...)
  }
  
  return(img)
}
```


```{r}
image_read_with_default(params$user1)
```
Sanam
7 июля 2021 в 13:58
0

Большое спасибо! Немного изменил это, но это очень помогло