Могу ли я переписать этот цикл в R, используя `lapply`? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть скрипт на R, который я пытаюсь использовать для разделения нескольких фреймов данных по определенной переменной.В настоящее время я использую цикл, чтобы сделать это, и мне интересно, могу ли я вместо этого использовать lapply или подобную функцию.

Цикл, по сути, принимает фрейм данных df, который имеет столбец с именем Time,Значения времени указаны в часах и варьируются от 0 до 48, кратных шести (это то, что содержится в списке индексов).

Код должен создать новый фрейм данных с именем data.time.0, состоящий из всех строк, гдевремя = 0 и т. д. для каждого значения времени.

library(tidyverse)

index = seq(from = 0, to = 48, by = 6)

for (i in index) {
  name = paste("data.time."+i,sep = "")
  currentdf = filter(df,df$time == i)
  assign(name,currentdf)
}

Однако я слышал, что по возможности следует избегать использования assign, и я хотел бы использовать векторную операцию, а непетля.Это возможно?Как бы я это сделал?

1 Ответ

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

Прямой перевод на lapply() будет

mylist <- lapply(seq(from = 0, to = 48, by = 6), function(x){
  filter(df, df$time == x)
})

names(mylist) <- paste("data.time.", seq(from = 0, to = 48, by = 6),sep = "")

Хотя я согласен с комментарием @ Roland.Весьма вероятно, что есть более простой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...