Как получить несколько файлов в R без возврата значения ($ value) и видимых ($ visible) трассировок - PullRequest
1 голос
/ 25 февраля 2020

Скажите, у меня есть следующие .R файлы:

R / 01_script.R

cat("You are now in 01_script.R")

R / 01_script.R

cat("You are now in 01_script.R")

Я хотел бы поместить их в отдельный вызов / файл WORKFLOW.R, который содержит оба этих файла:

WORKFLOW.R

source(here::here("R/01_script.R"))
source(here::here("R/02_script.R"))

Запустив это, я получаю следующее напечатанное на консоли:

You are now in 01_script.R
You are now in 02_script.R

Если я пытаюсь абстрагировать это в список и затем запустить sapply, lapply или purrr::map, Я получаю более подробный вывод:

list_of_scripts <- list(
  here::here("R/01_script.R"),
  here::here("R/02_script.R")
)

lapply(list_of_scripts, source)
# You are now in 01_script.RYou are now in 02_script.R[[1]]
# [[1]]$value
# NULL
# 
# [[1]]$visible
# [1] FALSE
# 
# 
# [[2]]
# [[2]]$value
# NULL
# 
# [[2]]$visible
# [1] FALSE

# ...and similar results with either...
sapply(list_of_scripts, source)

# ...or this...
library(tidyverse)
list_of_scripts %>% 
  map(source)

Я не понимаю документацию source() и не смог удалить подробный вывод. Я пробовал различные комбинации echo = FALSE, print.eval = FALSE, withAutoPrint(print. = FALSE), et c. но консоль печатает переменные $value и $visible в структуре списка.

Есть ли способ абстрагировать вызов source() для нескольких файлов и сохранить "чистый" вывод консоли? Еще лучше, если вывод cat() может автоматически вставлять символы новой строки \n.

1 Ответ

1 голос
/ 25 февраля 2020

Просто оберните lapply в функцию, которая невидимо возвращает:

silent_lapply <- function(...) invisible(lapply(...))

silent_lapply(list_of_scripts, source)
#> You are now in 01_script.R
#> You are now in 02_script.R
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...