小编Ste*_*fan的帖子

会话结束时的计时事件

我正在构建一个Shiny应用程序,我想在客户端关闭时停止(本地)服务器.实现此目的的一种简单方法是将其包含在shinyServer函数中:

session$onSessionEnded(function() {
    stopApp()
})
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是如果用户决定点击刷新,那么应用程序就会死亡.

我已经尝试了各种变通方法,使用eg reactiveTimer/ invalidateLater以特定间隔检查连接.但是,它们采用会话引用(它们特定于会话),因此之后不执行任何操作onSessionEnded.

有没有办法让一个"全局"服务器计时器定期执行,并且可以检查活动连接?或者另一种实现自动应用程序关闭但允许刷新页面的方法?

r shiny

11
推荐指数
1
解决办法
1263
查看次数

R公式和结果系数名称

在下面的示例中,假设您有一个模型,其中supp是因子变量.

lm(len ~ dose + supp, data = ToothGrowth)
Run Code Online (Sandbox Code Playgroud)

但我想使用不同的基准水平.我可以直接在公式中指定:

lm(len ~ dose + relevel(supp, "VC"), data = ToothGrowth)
Run Code Online (Sandbox Code Playgroud)

输出将是:

Call:
lm(formula = len ~ dose + relevel(supp, "VC"), data = ToothGrowth)

Coefficients:
      (Intercept)                   dose  relevel(supp, "VC")OJ  
            5.573                  9.764                  3.700 
Run Code Online (Sandbox Code Playgroud)

直接在公式中进行转换非常方便,而不是制作中间数据集或改变现有数据集.例如,当您使用scale标准化变量时,必须考虑最终模型中包含的其他变量中的缺失.但是,通常,输出中的结果系数名称变得非常难看.

我的问题是:是否可以指定在使用公式时由表达式产生的变量的名称?就像是

lm(len ~ dose + (OJ = relevel(supp, "VC")), data = Toothgrowth)
Run Code Online (Sandbox Code Playgroud)

(这不起作用).

编辑:虽然G.Grothendieck提出的解决方案很好,但它实际上产生了错误的结果.以下示例显示了这一点:

# Create some data:
df <- data.frame(x1 = runif(10), x2=runif(10))
df <- transform(df,   y = x1 + x2 + rnorm(10))

# …
Run Code Online (Sandbox Code Playgroud)

r formula

7
推荐指数
1
解决办法
768
查看次数

R:暂时覆盖函数和范围/命名空间

考虑以下R代码:

local({
  lm <- function(x) x^2 
  lm(10)
})
Run Code Online (Sandbox Code Playgroud)

这会暂时覆盖该lm功能,但一旦local执行,它将"恢复正常".我想知道为什么同样的方法似乎在下一个简单的例子中不起作用:

require(car)
model <- lm(len ~ dose, data=ToothGrowth)
local({
  vcov <- function(x) hccm(x) #robust var-cov matrix
  confint(model) # confint will call vcov, but not the above one.
})
Run Code Online (Sandbox Code Playgroud)

confint函数使用该vcov函数来获得系数的标准误差,并且想法是通过暂时覆盖使用鲁棒的var-cov矩阵vcov,而不用"手动"或改变函数.

vcov和confint都是通用函数,我不知道这是不是它按预期工作的原因.这不是我感兴趣的具体例子; 而是概念课.这是命名空间还是范围"问题"?

scope namespaces r

6
推荐指数
1
解决办法
951
查看次数

R闪亮的应用程序输入取决于更新的数据

我正在使用闪亮构建一个Web应用程序,我不确定如何最好地构建应用程序,因为输入依赖于数据,输出(图表)依赖于基于输入的聚合数据.

我试图想出一个简单的应用程序来重现问题.我的设置更高级,与示例无关.假设您有一个产品系列并想分析销售情况.假设每天都创建一个数据集(我不是说数据结构是最优的,但它对于说明我的问题很有用).现在,在应用程序中,从可用日期列表中选择一个日期,然后选择一个产品.日期仅限于可用数据的期间,产品列表仅限于在选定日期实际销售的产品.然后,我们希望绘制白天每小时的总销售额.

我将列出下面这样一个示例的一些代码,其中还创建了一些示例数据.对不起"长"代码.它有点工作,但我有一些担忧.

我的问题是:

1)我想知道事情的执行顺序,特别是首次加载应用程序时,以及每次输入更改时.同样,数据取决于第一输入,第二输入取决于数据.第三,计算用于图表的图表友好数据集.您可能会注意到错误会打印到控制台(并在浏览器中短暂闪烁),但是当值可用时,会进行更新并显示图表.这似乎不是最理想的.

2)当输入依赖于数据/服务器时,当前的最佳实践是什么.R?我看到这个https://groups.google.com/forum/?fromgroups=#!topic/shiny-discuss/JGJx5A3Ge-A但似乎这没有实现,甚至以为后已很旧.

这是两个文件的代码:

# ui.R
######

library(shiny)

shinyUI(pageWithSidebar(

  headerPanel("New Application"),

  sidebarPanel(
    htmlOutput("dateInput"),
    htmlOutput("prodInput")
  ),

  mainPanel(
    plotOutput("salesplot")  
  )

))
Run Code Online (Sandbox Code Playgroud)

和:

#server.R
#########

library(shiny)
library(filehash)

set.seed(1)

dates    <- format(seq(Sys.Date() - 10, Sys.Date(), "days"), "%Y-%m-%d")
products <- LETTERS
prices   <- sample(10:100, size = length(products), replace = TRUE)
names(prices) <- LETTERS

if (file.exists("exampledb")) {

  db <- dbInit("exampledb")

} else {

  dbCreate("exampledb")
  db <- dbInit("exampledb")

  for (d in dates) {
    no.sales <- sample(50:100, size = 1)
    x <- data.frame( …
Run Code Online (Sandbox Code Playgroud)

r reactive-programming shiny

6
推荐指数
1
解决办法
1340
查看次数

model.frame和更新

在R中,您可能已经估计了具有对数转换后的因变量的模型:

mfit <- lm(
    formula = log(salary) ~ yrs.service + yrs.since.phd, 
    data    = Salaries
  )
Run Code Online (Sandbox Code Playgroud)

然后,您可能想要更改模型框架并调用更新以重新拟合模型:

n     <- nrow(Salaries)
mfr   <- model.frame(mfit)[sample(1:n, size=n, replace=TRUE),]
mfit2 <- update(mfit, data = mfr)
Run Code Online (Sandbox Code Playgroud)

这将导致错误:

Error in eval(expr, envir, enclos) : object 'salary' not found
Run Code Online (Sandbox Code Playgroud)

原因是公式仍然具有因变量,log(salary)并且模型框架中的变量称为log(salary)。R认为它可以找到salary然后调用log它。如果不重新采样,将发生相同的错误,该示例仅说明了为什么要这样做。

上面的过程来自引导程序包,在其中执行重采样行。这是预期的行为,还是错误?我知道可以通过转换数据参数中的变量来解决它,但这似乎很烦人并且被忽略了……

r formula lm

5
推荐指数
1
解决办法
595
查看次数

F#:如何使用SQL数据源创建Deedle Frame

我想确定当数据来自SQL服务器时,在F#中创建Deedle Frame的最佳方法是什么.我尝试过如下的事情.

#I "../packages/Deedle.0.9.12"
#load "Deedle.fsx"

#r "System.dll"
#r "System.Data.dll"
#r "System.Data.Linq"
#r "FSharp.Data.TypeProviders.dll"

open System
open System.Data
open System.Data.Linq
open Microsoft.FSharp.Data.TypeProviders
open Deedle

type dbSchema = SqlDataConnection<"Data Source=server;Initial     Catalog=database;Integrated Security=SSPI;">
let db = dbSchema.GetDataContext()

let fr = db.SomeTable |> Frame.ofRows
Run Code Online (Sandbox Code Playgroud)

以及其他一些变种.但没有运气.我是F#和Deedle的新手.我可以看出上面的原因不起作用(Frame.ofRows与参数不兼容)但我不知道最好的方法是什么(甚至如何继续).

sql f# deedle

5
推荐指数
1
解决办法
1207
查看次数

公式中的R和因子编码

如果我想要自定义值假人,我该如何使用公式界面,例如,如果我想要值1和2,而不是0和1.估计可能如下所示,其中supp是因子变量.

fit <- lm(len ~ dose + supp, data = ToothGrowth)
Run Code Online (Sandbox Code Playgroud)

在这个例子中,没有太多使用不同的值,但在许多情况下"重写"模型它可能是有用的.

编辑:实际上,我有3个级别,并希望两列的编码方式不同,因此一个是1/0变量,另一个是1/2变量.上面的例子只有两个级别.

r formula r-factor

0
推荐指数
1
解决办法
752
查看次数

标签 统计

r ×6

formula ×3

shiny ×2

deedle ×1

f# ×1

lm ×1

namespaces ×1

r-factor ×1

reactive-programming ×1

scope ×1

sql ×1