Shiny中的异步处理应该采用长时间运行的功能并将控制权交还给用户.但是,让用户知道计算在后台运行仍然是一件好事.我无法弄清楚如何构建异步进程以在后台运行并仍然显示进度指示器.下面是我一直在摆弄的示例代码.我认为进度指示器是一个问题,但是表的创建似乎并不适用于异步处理.
library(shiny)
library(future)
library(promises)
plan(multiprocess)
shinyApp(
ui = basicPage(
tableOutput('table'),
actionButton('goTable', 'Go table')
),
server = function(input, output, session) {
table_data <- reactive({
# make reactive to button click
input$goTable
# Create a Progress object
progress <- shiny::Progress$new()
progress$set(message = "Building Table", value = 0)
# Close the progress when this reactive exits (even if there's an error)
on.exit(progress$close())
# build up the table data
future({
this_dat <- NULL
for(i in 1:5){
Sys.sleep(1)
this_dat <- rbind(this_dat, data.frame(i=i))
# increment progress …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 scikit-learn 管道中包含一个转换器,它将根据我自己提供的切割点将连续数据列分为 4 个值。KBinsDiscretizer的当前参数不起作用主要是因为该strategy参数只接受{‘uniform’, ‘quantile’, ‘kmeans’}.
pandas 中已经有这个cut()函数,所以我想我需要创建一个包含函数行为的自定义转换器。cut()
期望的行为(非实际)
X = [[-2, -1, -0.5, 0, 0.5, 1, 2]]
est = Discretizer(bins=[-float("inf"), -1.0, 0.0, 1.0, float("inf")],
encode='ordinal')
est.fit(X)
est.transform(X)
# >>> array([[0., 0., 1., 1., 2., 2., 3.]])
Run Code Online (Sandbox Code Playgroud)
上面的结果假设 bin 包括最右边的边缘并包括最低的边缘。像这个pd.cut()命令将提供:
import pandas as pd
import numpy as np
pd.cut(np.array([-2, -1, -0.5, 0, 0.5, 1, 2]),
[-float("inf"), -1.0, 0.0, 1.0, float("inf")],
labels=False, right=True, include_lowest=True)
# >>> array([0, 0, …Run Code Online (Sandbox Code Playgroud) 在 R 中,您可以mgcv使用包含诸如log或 之类的变换的公式来拟合包中的 GAM 模型sqrt,并且默认情况下model.frame会返回 (仅返回公式中指定的已应用变换的变量)。
有什么办法可以恢复未变形的吗data.frame?
例子:
reg <- mgcv::gam(log(mpg) ~ disp + I(hp^2), data=mtcars)
回报
> head(reg$model,3)
log(mpg) disp I(hp^2)
Mazda RX4 3.044522 160 12100
Mazda RX4 Wag 3.044522 160 12100
Datsun 710 3.126761 108 8649
但是,我想从模型中获取这个未转换的数据集model.frame
mpg disp hp
Mazda RX4 21.0 160 110
Mazda RX4 Wag 21.0 160 110
Datsun 710 22.8 108 93
一些背景:newdata大多数模型predict()函数的参数需要未转换的数据,因此我无法将其model.frame反馈到predict() …
我想使用pandas.agg()中的函数按组计算数据集中一列的平均值和另一列的加权平均值。我知道一些解决方案,但它们都不是很简洁。
此处发布了一个解决方案(pandas and groupby: how tocalculate Weighted Averages inside an agg,但它看起来仍然不是很灵活,因为权重列是硬编码在 lambda 函数定义中的。我正在寻找创建一种语法更接近这个:
(
df
.groupby(['group'])
.agg(avg_x=('x', 'mean'),
wt_avg_y=('y', 'weighted_mean', weights='weight')
)
Run Code Online (Sandbox Code Playgroud)
这是一个完整的示例,其中的代码似乎不必要地复杂:
import pandas as pd
import numpy as np
# sample dataset
df = pd.DataFrame({
'group': ['a', 'a', 'b', 'b'],
'x': [1, 2, 3, 4],
'y': [5, 6, 7, 8],
'weights': [0.75, 0.25, 0.75, 0.25]
})
df
#>>> group x y weights
#>>> 0 a 1 5 0.75
#>>> 1 a 2 6 …Run Code Online (Sandbox Code Playgroud) 该XML2包允许用户创建XML文档.我正在尝试使用管道运算符创建一个文档%>%来添加子节点和兄弟节点的各种组合.我无法弄清楚如何在子节点内创建子节点,该子节点跟随原始子节点的兄弟节点(参见下面的示例).
是否有可能"升级"一个级别然后创建更多节点或者是否必须在链式命令之外创建它们?
我想要的是
library(xml2)
x1 <- read_xml("<parent><child>1</child><child><grandchild>2</grandchild></child><child>3</child><child>4</child></parent>")
message(x1)
#> <?xml version="1.0" encoding="UTF-8"?>
#> <parent>
#> <child>1</child>
#> <child>
#> <grandchild>2</grandchild>
#> </child>
#> <child>3</child>
#> <child>4</child>
#> </parent>
Run Code Online (Sandbox Code Playgroud)
我在创造那是错的
library(magrittr)
library(xml2)
x2 <- xml_new_document()
x2 %>%
xml_add_child("parent") %>%
xml_add_child("child", 1) %>%
xml_add_sibling("child", 4, .where="after") %>%
xml_add_sibling("child", 3) %>%
xml_add_sibling("child", .where="before") %>%
xml_add_child("grandchild", 2)
message(x2)
#> <?xml version="1.0" encoding="UTF-8"?>
#> <parent>
#> <child>1</child>
#> <child>4</child>
#> <child>
#> <grandchild>2</grandchild>
#> </child>
#> <child>3</child>
#> </parent>
Run Code Online (Sandbox Code Playgroud)
使用XML包的解决方案
如果使用 …
r ×3
pandas ×2
asynchronous ×1
lm ×1
mgcv ×1
numpy ×1
python ×1
python-3.x ×1
regression ×1
scikit-learn ×1
shiny ×1
xml2 ×1