我尝试通过应用可分类为以下几类的函数来对嵌套模型进行分析:
1.引用函数中参数固定的嵌套列中的数据
1.引用嵌套列中的数据,参数作为列出列动态引用
1.引用嵌套列中的数据,参数在未列出的列中动态引用
1.引用带有直接引用的参数的嵌套列中的数据
求助:
1.我无法使make_data_input
公式工作,无论其嵌套数据还是非嵌套数据
1.我根本无法在嵌套数据集中得到make_data_input
公式
library(tidyverse)
#This work
make_data_fixed <- function(df) {
df %>%
mutate(price_cumsum=cumsum(price),
max_price_cumsum=max(price_cumsum))
}
# the max column is not calculating the max column of price but instead pulling the prie_cumsum column values it pulls in the literal value
make_data_input <- function(df,x) {
df %>%
mutate("{{x}}_cumsum":=cumsum({{x}}),
"max_{{x}}_cumsum":=max("{{x}}_cumsum")
)
}
selected_cols <- c("clarity","depth")
calculate_stuff <- function(df,x) {
df %>%
summarize(across({x},
~length(
unique(.)
)
)
)
}
calculate_stuff(diamonds,selected_cols)
diamonds %>%
group_by(cut,color) %>%
nest() %>%
mutate(test=list(selected_cols),
carat="carat") %>%
mutate(simple=map(data,make_data_fixed),# this works
calculate_direct=map2(.x=data,.y=test,~calculate_stuff(df=.x,x=.y)), # this works
calculate_indirect=map2(.x=data,.y=carat,~calculate_stuff(df=.x,x=.y)), # this works
complex=map2(.x=data,.y=price,~make_data_input(df=.x,.y=price)) # this doesn't work
)
1条答案
按热度按时间qxgroojn1#
我会做两件事。首先,使用
dplyr::rowwise()
而不是purrr::map
,这使得代码更容易阅读和推理。也更容易理解函数中包含哪些对象名。其次,我们需要更正
make_data_input
。您使用max("{{x}}_cumsum")
,但"{{x}}_cumsum"
仅仅是一个字符串。我们需要首先基于"{{x}}_cumsum"
创建一个字符串,我们使用rlang::englue()
完成此操作,然后可以在.data[[]]
或!! sym()
中使用此字符串。由reprex package(v2.0.1)于2023年2月22日创建