反应性地将函数传递给 tsibble index_by
Reactively passing functions into tsibble index_by
我在将 date-time
折叠函数从程序包 tsibble
反应式传递到 index_by
函数时遇到问题。
index_by
将 time function
作为参数(例如 lubridate
中的 week()
或 month()
)并相应地折叠数据。
我希望折叠对用户输入(特别选择的数据范围)有反应。
示例:如果选择 date-range > 60
,使用 week()
折叠,如果选择 date-range > 120
,使用 month()
折叠。
编辑:
我特别指的是在闪亮模块的服务器端上下文中使用 tsibble 进行绘图。示例:
mod_plot = function(input, output, session, df, date_Range){
output$plot = renderPlotly({
df() %>%
index_by(collapse_time = week(.)/month(.)) %>%
summarise(trace1 = sum(trace1))%>%
plot_ly(type = 'bar', x = ~collapse_time, y = ~trace1)
})
}
为了避免代码重复,最好能以某种方式将日期折叠函数传递给 index_by。使用 tibbletime 的示例:
mod_plot = function(input, output, session, df, date_Range){
output$plot = renderPlotly({
#create reactive variable collapse_time based on selected time range
collapse_time = renderText(if(as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]) <= 60){"daily"}
else if(as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]) < 120){"weekly"}
else{"monthly"})
df() %>%
collapse_by(collapse_time ) %>%
group_by(date) %>%
summarise(trace1 = sum(trace1))%>%
plot_ly(type = 'bar', x = ~date, y = ~trace1)
})
}
这允许简洁易读的管道。
此自定义函数 returns 需要基于所选日期范围的折叠函数。
get_fct =
function(x){
if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] <= 60){
ymd
}
else if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] < 120){
yearweek
}
else if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] >= 120){
yearmonth}
}
collapsing_function = get_fct(x = as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]))
我在将 date-time
折叠函数从程序包 tsibble
反应式传递到 index_by
函数时遇到问题。
index_by
将 time function
作为参数(例如 lubridate
中的 week()
或 month()
)并相应地折叠数据。
我希望折叠对用户输入(特别选择的数据范围)有反应。
示例:如果选择 date-range > 60
,使用 week()
折叠,如果选择 date-range > 120
,使用 month()
折叠。
编辑: 我特别指的是在闪亮模块的服务器端上下文中使用 tsibble 进行绘图。示例:
mod_plot = function(input, output, session, df, date_Range){
output$plot = renderPlotly({
df() %>%
index_by(collapse_time = week(.)/month(.)) %>%
summarise(trace1 = sum(trace1))%>%
plot_ly(type = 'bar', x = ~collapse_time, y = ~trace1)
})
}
为了避免代码重复,最好能以某种方式将日期折叠函数传递给 index_by。使用 tibbletime 的示例:
mod_plot = function(input, output, session, df, date_Range){
output$plot = renderPlotly({
#create reactive variable collapse_time based on selected time range
collapse_time = renderText(if(as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]) <= 60){"daily"}
else if(as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]) < 120){"weekly"}
else{"monthly"})
df() %>%
collapse_by(collapse_time ) %>%
group_by(date) %>%
summarise(trace1 = sum(trace1))%>%
plot_ly(type = 'bar', x = ~date, y = ~trace1)
})
}
这允许简洁易读的管道。
此自定义函数 returns 需要基于所选日期范围的折叠函数。
get_fct =
function(x){
if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] <= 60){
ymd
}
else if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] < 120){
yearweek
}
else if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] >= 120){
yearmonth}
}
collapsing_function = get_fct(x = as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]))