小编Jul*_*ian的帖子

闪亮:更新输入而不触发反应?

是否有可能在不触发反应的情况下更新输入?

下面我举了一个最小的例子。目的是在不改变主面板中的值的情况下更新滑块。当滑块再次更改时,应再次将其转发给相关反应。

问题和潜在用例类似于以下问题:R 闪亮 - 更新***输入和反应性更新 SelectInput可能存在问题而没有触发反应性?. 与这些问题类似,在我的用例中有一个依赖于两个输入的反应。我想根据另一个更新这些输入中的一个,这导致反应性计算两次。然而,这两个问题都通过选择性地更新输入来解决这个问题。这在我的用例中是不可能的,因为我想通过更新输入向用户显示一些信息。

如果没有可能在不触发反应的情况下更新输入,我会问一个关注我的用例的后续问题。

例子

library(shiny)

ui <- fluidPage(
   titlePanel("Update Slider - Isolate reaction?"),

   sidebarLayout(
      sidebarPanel(
         sliderInput("bins",
                     "Number of bins:",
                     min = 1,
                     max = 50,
                     value = 30),
         actionButton("set1", "set slider 'bins'$value=20"),
         actionButton("set2", "'ISOLATED' set slider 'bins'$value=20 ")
      ),

      mainPanel(
         textOutput("sliderValue")
      )
   )
)

# Define server logic 
server <- function(input, output, session) {
   output$sliderValue <- renderText(input$bins) 

   observeEvent(input$set1,{
     updateSliderInput(session,"bins",value=20)
   })
   observeEvent(input$set2,{
     ## Is there any possibility …
Run Code Online (Sandbox Code Playgroud)

r reactive-programming shiny

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

data.table:使用with = False和转换函数/汇总函数?

我想总结data.table中的几个变量,宽格式输出,输出可能作为每个变量的列表.由于其他几种方法都不起作用,我试图做一个外部的lapply,给出变量的名称作为字符向量.我希望使用= FALSE传递这些内容.

carsx=as.data.table(cars)
lapply( list(speed="speed",dist= "dist"), #error object 'ansvals' not found
    function(x)  carsx[,list(mean(x), min(x), max(x) ), with=FALSE ] ) 
Run Code Online (Sandbox Code Playgroud)

由于这不起作用,我尝试了更简单的方法,没有lapply.

carsx[,list(mean("speed"), min("speed"), max("speed") ), with=FALSE ] #error object 'ansvals' not found
Run Code Online (Sandbox Code Playgroud)

这也不起作用.有没有办法做这样的事情?这种'与'的行为是否需要?(我知道?data.table只提到选择列,但在我的情况下,能够转换它们也很有用)

当= = FALSE时,j是要选择的名称或位置的向量,类似于data.frame.with = FALSE在data.table中通常很有用,可以动态选择列.

编辑我的目的是针对不同的变量以宽格式获取每组的摘要.我尝试扩展以下内容,它仅适用于一个变量,用于变量列表.

carsx[,list(mean(speed), min(speed), max(speed) ) ,by=(dist>50)
Run Code Online (Sandbox Code Playgroud)

可悲的是SO不允许我发布我的另一个问题.我在那里描述了我想要一个类似的输出:

lapply( list(speed="speed",dist= "dist"),
        function(x) do.call("as.data.frame", aggregate(cars[,x], list(class=cars$dist>50), FUN=summary) ) )
Run Code Online (Sandbox Code Playgroud)

预期输出将是这样的:

$speed 
         V1       V2 V3
1: FALSE 12.96970  4 20
2:  TRUE 20.11765 14 25

$dist
         V1       V2 V3
1: FALSE 12.96970  4 20 …
Run Code Online (Sandbox Code Playgroud)

r summarization group-summaries lapply data.table

5
推荐指数
2
解决办法
5291
查看次数

Pander + Knitr问题:使用pander.list时出错

另一个与pander(+ knitr)可重现的错误:当我尝试平移列表时,我无法创建PDF文件 - 它似乎发生在将表或data.frame放入列表中时.如果列表中只有向量,则PDF编译但看起来很难看.

我在Windows上使用pander 0.5.1,knitr 1.7,R 3.1.1,Miktex + RStudio.

Doesn't work:
```{r, eval=FALSE}
pander(list(cor=cor(cars) ) )
```
Run Code Online (Sandbox Code Playgroud)

错误:

output file: Preview-e905ccd5f1a.knit.md

! Undefined control sequence.
l.246   \textbf{cars}: {[}1{]} ``\n

pandoc.exe: Error producing PDF from TeX source
Fehler: pandoc document conversion failed with error 43
Zus?tzlich: Warnmeldung:
Ausf?hrung von Kommando '"C:/Program Files/RStudio/bin/pandoc/pandoc" Preview-e905ccd5f1a.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash-implicit_figures --output Preview-e905ccd5f1a.pdf --template "C:\Users\jbothe\Documents\R\win-library\3.1\rmarkdown\rmd\latex\default.tex" --highlight-style tango --latex-engine pdflatex --variable "geometry:margin=1in"' ergab Status 43 
Ausf?hrung angehalten
Run Code Online (Sandbox Code Playgroud)

当我在控制台中使用pander并手动复制并粘贴它时,它会编译:

* **cor**:

    --------------------------
      &nbsp;     speed   dist
    ----------- …
Run Code Online (Sandbox Code Playgroud)

r list knitr pander

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

过滤data.table的日期问题 - 使用固定日期但不使用变量

我想过滤日期的data.table - 给定开始日期和结束日期,我想拥有包含给定日期的所有行.

现在我的问题:它在我使用固定日期时有效,但是当我想将日期存储在外部变量中时它会返回一个空表.任何提示?

dt = data.table(begin=as.Date('2014-01-01'):as.Date('2014-01-10'),
                end=as.Date('2014-01-01'):as.Date('2014-01-10')+c(1,1,1,2:8),
                x=c('A','B','C','D','E','J','J','J','J','J'))
dt[,`:=`(begin_idate=as.IDate(begin, origin='1970-1-1'),
         end_idate=as.IDate(end, origin= '1970-1-1'))]
dt[as.Date('2014-01-09')>begin_idate  & as.Date('2014-01-09')<=end_idate ] # works
x=as.Date('2014-01-09')
dt[x>begin_idate  & x<=end_idate ] #doesnt' work - empty data.table
Run Code Online (Sandbox Code Playgroud)

r date data.table

4
推荐指数
1
解决办法
74
查看次数

订购data.table沿数字列puttint特殊值(剩余类别)最后一列

是否有可能在数据列中排序data.table,同时最后放置一个特殊行(残余类别)(基于另一列的标签)?

DT <- data.table (a =c("a", "sd", "set", "c", "s", "REST", "sde", "de"), 
              b=c(5,1:4, 2.5, 1:2))
Run Code Online (Sandbox Code Playgroud)

预期的产出会是这样的

      a   b
1:   sd 1.0
2:  sde 1.0
3:  set 2.0
4:   de 2.0
5:    c 3.0
6:    s 4.0
7:    a 5.00
8: REST 2.5
Run Code Online (Sandbox Code Playgroud)

我在下面给出了一个答案,但我想知道是否有一种可能没有rbind.这很复杂,我想这也会复制整个data.table;)

r data.table

3
推荐指数
1
解决办法
66
查看次数

闪亮的模块:从外部访问和更改位于模块服务器功能内部的反应值?

我有一个闪亮的模块,它使用反应值来存储其内部状态。在下面的示例中,这仅用于输出输入更改的数字,但我的实际用例更复杂。

我现在想创建一个函数,该函数可用于将这些模块之一设置为另一个模块的状态,包括内部状态 - 或更一般地说:我想创建一个函数 updateModule,它也可以更新内部状态。

所以我的问题是:如何从外部访问和更改模块的内部反应值?

另一个与我的特殊目的相关的问题是:如何在更新输入时防止内部反应值更新 - 或者如何重置它(回到主要问题?

目前,我知道两种可能的解决方法:

  1. 将内部状态存储在隐藏输入中
  2. 使用 data.table AB的按引用调用逻辑(见下文)。还有其他实现 call-by-reference 的方法,但还没有使用它们。

但是,我很想知道是否有更直接的解决方案,也因为我要更新的内部结构是更复杂的列表。

示例代码

#Problem: How to change reactiveValues from the outside?

library(shiny)

moduleUI <- function(id, label=id,min = 0,max = 100,value = 30){
  ns <- NS(id)

  fluidRow(
        column(width=9,
               sliderInput(ns("sl"), label=label, min=min, max=max, value=value)
               ),
        column(width=2,
               textOutput(ns("changesCount") )
               )
        )
}

synchModule<-function(session, targetModule, oldModule){
  ns<-NS(targetModule)
  updateSliderInput(session,ns("sl"),value=oldModule() )

  ##Accessing and changing internal Value of targetModule??

}

module<- function(input, output, session){ …
Run Code Online (Sandbox Code Playgroud)

module r shiny

3
推荐指数
1
解决办法
1732
查看次数