Я пытаюсь получить что-то похожее на это:
mylist <- list(c("a"), c("a", "b"), c("a","b","c"))
во что-то похожее на это:
list(c("y ~ a"), c("y ~ a + b"), c("y ~ a + b + c"))
для одного элемента, я могу сделать это:
test <- paste0("y ~ ", paste0(mylist[[3]], collapse = " + "))
test
[1] "y ~ a + b + c"
поэтому я подумал, что попробую использовать заявку, и это тоже работает:
mylistupdater <- function(X){
mylist[[X]] <- paste0("y ~ ", paste0(mylist[[X]], collapse = " + "))
}
lapply(c(1:length(mylist)), mylistupdater)
проблема в том, что мой реальный список содержит 16 миллионов записей, и это такчтобы замедлитьЯ думаю, что пишу функцию apply очень плохо, как цикл. Он должен адресоваться не к индексу, а к списку напрямую, верно? Но примеры, которые я вижу в Интернете, включают в себя простую функцию. Как я могу передать аргументы этому с этими двумя paste0()
командами и с уборщиком lapply()
? Или есть решение data.table
? Выходные данные вполне могут быть столбцом в data.table. Скорость на самом деле важна на этот раз.
edit: @akrun и @Rui дают отличные ответы ниже, которые решают мою проблему. Теперь у меня есть роскошь думать о скорости, и вот скачка, повторяющая каждый из ответов 100 000 раз на моей машине:
версия с mylistupdater(mylist)
: разница во времени 1,072506 с
версия с lapply(mylist, reformulate, response = "y")
: разница во времени 10,5461 с
версия с lapply(mylist, function(x) format(reformulate(x, "y")))
: разница времени 18,20975 с