Как использовать список для предоставления аргументов в sprintf в r - PullRequest
1 голос
/ 04 апреля 2020

Я пытаюсь автоматизировать некоторый код, который заполняет некоторый общий c текст, который у меня есть. Например, у меня может быть две строки с разным количеством заполнителей для чисел. Способ, которым код в настоящее время настроен, требует передачи количества значений, которые строка должна будет добавить к нему. Если бы я мог как-то распаковать список, чтобы он содержал ... в sprintf, то я мог бы пропустить все уродливые операторы if.

Спасибо, ребята!

text_1 <- "This is a number %.1f"
text_2 <- "This is a number %.1f and this %.1f"

v1 <- 0.1
v2 <- 0.5
type = 1

if(type == 1)sprintf(text_1, v1)
if(type == 2)sprintf(text_2, v1, v2)

# ideally
l <- list(v1, v2)
sprint(text_2, unlist(l)) # something like unlist.

1 Ответ

1 голос
/ 04 апреля 2020

Мы можем использовать reduce

library(purrr)
reduce(l, sprintf, fmt = text_2)
#[1] "This is a number 0.1 and this 0.5"

Может быть упакован в функцию

f1 <- function(params, txt){
      reduce(params, sprintf, fmt = txt)
  }

f1(l, text_1)
#[1] "This is a number 0.1"

f1(l, text_2)
#[1] "This is a number 0.1 and this 0.5"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...