Используя советы @phiver, вы можете попробовать это:
dat = data.frame(height = c(20, 20, 40, 50, 60, 10),
weight = c(100, 200, 300, 200, 140, 240),
age = c(19, 20, 20, 19, 10, 11))
Age_list <- c(19,20)
for (i in Age_list){
toy_output <- split(dat,dat$age==i)$`TRUE`
print(toy_output)
}
Результат:
height weight age
1 20 100 19
4 50 200 19
height weight age
2 20 200 20
3 40 300 20
EDIT:
Вы можете сделать простой обходной путь, чтобы поместить его в функцию:
toy_func <- function(df,list,x){
for (i in list){
toy_output <- split(df,df[,x]==i)$`TRUE`
print(toy_output)
}
}
toy_func(dat,Age_list ,3)
height weight age
1 20 100 19
4 50 200 19
height weight age
2 20 200 20
3 40 300 20
EDIT2:
И это даст вам data.frame
с результатом со столбцом i
, который сообщает вам, какая итерация генерирует каждую строку:
toy_func <- function(df,list,x){
datalist = list()
for (i in list){
toy_output <- data.frame(split(df,df[,3]==i)$`TRUE`)
toy_output$i <- i
datalist[[i]] <- toy_output
}
print(do.call(rbind, datalist))
}
toy_func(dat,Age_list ,3)
height weight age i
5 60 140 10 10
2 20 200 20 20
3 40 300 20 20