Как заменить переменное число заполнителей с заменой последовательности в r? - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел заменить заполнитель %f вектором последовательностей.В настоящее время я использую функцию stringr, но для каждого заполнителя я должен добавить дополнительный вектор замены.Проблема в том, что количество заполнителей в тестовой строке является переменным.Мой код ниже не очень элегантный, и он зафиксирован для 8 заполнителей.Есть ли способ сделать это более динамичным, с помощью stringr или любой другой библиотеки?

sequence = seq(-10, 10, by = 0.001)

if (str_count(equation, "%f") == 1) {
input_equations <-sprintf(equation, sequence )
}
else if (str_count(equation, "%f") == 2) {
input_equations <-sprintf(equation, sequence, sequence )
}
else if (str_count(equation, "%f") == 3) {
input_equations <-sprintf(equation, sequence, sequence, sequence )
}
else if (str_count(equation, "%f") == 4) {
input_equations <-sprintf(equation, sequence, sequence, sequence, sequence )
}
else if (str_count(equation, "%f") == 5) {
input_equations <-sprintf(equation, sequence, sequence, sequence, sequence, sequence )
}
else if (str_count(equation, "%f") == 6) {
input_equations <-sprintf(equation, sequence, sequence, sequence, sequence, sequence, sequence )
}
else if (str_count(equation, "%f") == 7) {
input_equations <-sprintf(equation, sequence, sequence, sequence, sequence, sequence, sequence, sequence )
}
else if (str_count(equation, "%f") == 8) {
input_equations <-sprintf(equation, sequence, sequence, sequence, sequence, sequence, sequence, sequence, sequence )
}

1 Ответ

0 голосов
/ 18 февраля 2019

Вы можете сделать это с помощью функции do.call.Вам понадобится список аргументов.Итак, код:

# Example equation and sequence
equation <- "a + %f - %f"
sequence <- c(1:3)

# Get number of placeholders
str_n <- str_count(equation, "%f")
# Construct arguments list
arg_list <- lapply(c(1:str_n), function(x) sequence)
arg_list$fmt <- equation # Named argument

# Call sprintf with constructed arguments
input_equations <- do.call("sprintf", arg_list)

Вот результат:

[1] "a + 1.000000 - 1.000000" "a + 2.000000 - 2.000000"
[3] "a + 3.000000 - 3.000000"
...