新しい変数を生成するためにtbl内の複数のパラメータと変数を効率的にマップする方法がわかりません。map()とmutate()を使用して複数の変数とパラメータをループする
"本物の"バージョンでは、基本的に中央の推定値を生成する1つの数学関数があり、さまざまなパラメータを変更して一連の感度テストを実行する必要があります。私は、どのようにこれを整頓の中で行うかを考えようとしています。これはmap()とmutate()の答えですが、問題があります。
# building the practice dataset
pracdf <- tibble(ID = letters,
p = runif(26, 100, 1000),
med.a = runif(26),
med.b = runif(26),
c = runif(26))
pracdf <- pracdf %>%
mutate(low.a = med.a * 0.8,
low.b = med.b * 0.8,
high.a = med.a * 1.2,
high.b = med.b * 1.2)
# this generates a few low/med/high values for variables
# the function
pracdf <- pracdf %>% mutate(d = p * med.a * med.b * c)
# works as expected. Now can I loop it with dynamic variable names?
f1 <- function(df, var.a) {
var.a <- enquo(var.a)
print(var.a)
d.name <- paste0("d.", quo_name(var.a))
print(d.name)
df %>% mutate(!!d.name := p * (!!var.a) * c)
}
pracdf2 <- f1(pracdf, med.a)
# works great! Eventually I want to loop through low, med, high. Start with a loop of 1
pracdf3 <- map(list(med.a), f1, df = pracdf)
# loop crashes spectacularly
pracdf3 <- map(list(med.a), ~f1, df = pracdf)
# failure
pracdf3 <- map(med.a, ~f1, df = pracdf)
# what am I doing with my life
:出力を再現するために、ランダムなデータの前に
seed(888)
を使用してください。私は同じことをしばしば思います! :) – markdly