Возможно, это не то, что вы ожидали (поместив тег for-l oop), но вам следует воздерживаться от использования R для циклов, когда это возможно. Вместо этого привыкните к использованию векторизованных операций для итераций. Они намного эффективнее и создают более читаемый код. Один из вариантов - использование mapply
, другой - использование map
(пакет purrr
).
Функция tibble
создает основы для итерации (если хотите, итератор).
Комбинация mutate
и map
- это то, что фактически выполняет функцию rainbow
и сохраняет свои результаты в tibble
.
Результаты представлены в виде списка в списке (символьный векторный столбец внутри таблицы), поэтому unnest
используется для извлечения их обратно в обычный вектор.
В конце концов, чтобы получить его как простой вектор, вы можете использовать answer_tib$rainbow_val
.
Обратите внимание, что вывод, который вы указали в вопросе, не соответствует выводу, который вы должны получить. Непонятно, почему, может быть, вы хотели использовать разные значения для start_s
и start_v
?
library(tidyverse)
n_total <- 5
set_alpha <- 0.9
start_s <- 0.7
start_v <- 0.8
answer_tib <- tibble(run_index = seq(0, 0.1, by = 0.1)) %>%
mutate(rainbow_val = map(run_index, ~{
rainbow(n = n_total, start_s - .x, start_v - .x, alpha = set_alpha)
})) %>%
unnest(rainbow_val)
answer_tib$rainbow_val
#> [1] "#CC3D3DE6" "#AFCC3DE6" "#3DCC76E6" "#3D76CCE6" "#AF3DCCE6" "#B34747E6"
#> [7] "#9DB347E6" "#47B372E6" "#4772B3E6" "#9D47B3E6"