#r #performance #for-loop #vectorization #apply
#r #Производительность #для цикла #векторизация #применить
Вопрос:
Допустим, у меня есть простой цикл for, который добавляет случайное значение к фрейму данных.
person <- c("Clark Kent", "Bruce Wayne", "Tony Stark", "Carol Danvers")
sleep_time <- c(8, 1, 3, 6)
data <- data.frame(person, sleep_time)
for (i in 1:length(data$person)) {
idle <- sample(20:32, 1)
data$idle_time[i] <- idle
}
Как бы я написал это, используя возможности векторизации R, чтобы ускорить процесс до максимально возможного? Я знаю, что циклы for не рекомендуются, но также прочитал, что функции apply работают не намного быстрее.
Мои извинения, если эти вопросы похожи на другие. Я новичок в использовании возможностей векторизации R, и у меня возникают некоторые проблемы с пониманием того, как конвертировать между циклами и гораздо более быстрой векторизованной формой.
Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация.
Спасибо.
Комментарии:
1. Это то, что вы хотите? —
data$idle_time <- sample(20:32, nrow(data), replace = T)
Ответ №1:
Не уверен, каков на самом деле ваш вариант использования, однако для этого конкретного случая вы можете полностью отказаться от for
цикла, выполнив
data$idle_time <- sample(20:32, nrow(data))
Возможно, вы захотите включить условие replace = TRUE
, если ваше количество строк больше length(20:32)
.