У меня есть список циклов for, которые я хотел бы встроить в функцию. Однако, результат, данный этой функцией, равен NULL
. Вот пример:
library(dplyr)
test <- tibble(
group = rep(c("A", "B"), each = 6),
id = rep(rep(1:2, each = 3), 2),
foo = c(1998, 2000, 2004, 1997, 1998, 1999, 2006, 2008, 2010, 2009, 2010, 2011)
)
# A tibble: 12 x 3
group id foo
<chr> <int> <dbl>
1 A 1 1998
2 A 1 2000
3 A 1 2004
4 A 2 1997
5 A 2 1998
6 A 2 1999
7 B 1 2006
8 B 1 2008
9 B 1 2010
10 B 2 2009
11 B 2 2010
12 B 2 2011
Я пытался адаптировать следующее l oop:
for (i in c("A", "B")){
test <- test %>%
mutate(
foo = case_when(
group == i & id == 1 ~ "foo_1",
group == i & id == 2 ~ "foo_2",
TRUE ~ as.character(foo)
))
}
test
с помощью этой функции:
test_function <- function(x, y){
x <- enquo(x)
y <- enquo(y)
for (i in c("A", "B")){
test <- test %>%
mutate(
!!x := case_when(
group == i & (!!y) == 1 ~ "foo_1",
group == i & (!!y) == 2 ~ "foo_2",
TRUE ~ as.character(!!(x))
))
}
}
Но test_function(foo, id)
возвращает что-то NULL
.
Вот мой ожидаемый результат (я знаю, что его можно получить без l oop, но здесь я хотел бы знать, как встроить al oop в функцию):
# A tibble: 12 x 4
group id foo something
<chr> <int> <dbl> <chr>
1 A 1 1998 foo_1
2 A 1 2000 foo_1
3 A 1 2004 foo_1
4 A 2 1997 foo_2
5 A 2 1998 foo_2
6 A 2 1999 foo_2
7 B 1 2006 foo_1
8 B 1 2008 foo_1
9 B 1 2010 foo_1
10 B 2 2009 foo_2
11 B 2 2010 foo_2
12 B 2 2011 foo_2
Как я могу поместить этот l oop в функцию? Обратите внимание, что я хотел бы поместить множество циклов в уникальную функцию.