小编Bri*_*ers的帖子

为什么sapply比样本大小的循环慢?

所以假设我想取向量X = 2*1:N并将e提高到每个元素的指数.(是的,我认识到这样做的最好方法是简单地通过向量化exp(X),但重点是将循环与sapply进行比较).好吧,我通过逐步尝试三个方法(一个用于for循环,两个用不同的方式应用了sapply)和不同的样本大小并测量相应的时间来测试.然后,我绘制每种方法的样本大小N对时间t.

每种方法用"#####"表示.

k <- 20 
t1 <- rep(0,k) 
t2 <- rep(0,k)
t3 <- rep(0,k)
L <- round(10^seq(4,7,length=k))


for (i in 1:k) {
  X <- 2*1:L[i]
  Y1 <- rep(0,L[i])
  t <- system.time(for (j in 1:L[i]) Y1[j] <- exp(X[j]))[3] #####
  t1[i] <- t
}

for (i in 1:k) {
  X <- 2*1:L[i]
  t <- system.time( Y2 <- sapply(1:L[i], function(q) exp(X[q])) )[3] #####
  t2[i] <- t
}

for (i in 1:k) {
  X <- 2*1:L[i]
  t <- system.time( Y3 <- sapply(X, …
Run Code Online (Sandbox Code Playgroud)

benchmarking r

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

创建闪亮的反应变量,指示上次修改哪个小部件

假设我们有一组小部件,每个小部件都有自己的输入标签.我们如何创建一个反应对象,其值是表示最后修改的窗口小部件的输入ID的字符?

例如,如果我们有

ui.R

shinyUI(fluidPage(
   textInput('txt_a', 'Input Text A'),
   textInput('txt_b', 'Input Text B")
))
Run Code Online (Sandbox Code Playgroud)

server.R

shinyServer(function(input, output) {
   last_updated_widget <- reactive({
      #hypothetical code that indicates ID value of last updated widget
   })
})
Run Code Online (Sandbox Code Playgroud)

期望的结果如下.如果用户修改了第一个文本框,那么价值last_updated_widget()"txt_a".如果他们修改第二个框,则值last_updated_widget()变为"txt_b".我正在寻找一个结果,该结果延伸到将值设置为最后调整的任何小部件的ID的明显概括.

我希望这适用于任意数量的窗口小部件输入,包括它们是由renderUI()语句生成的情况.因此,reactive()不能为每个小部件创建单独的语句.但是,如果响应语句需要在所有小部件名称(或类似的东西)上循环,我当然可以使用它.并且多个被动语句是可以的,只要它是固定数量,而不是小部件数量的函数.

这似乎是一个非常简单的问题,所以当它成为我的障碍时,我感到很惊讶.我觉得这个解决方案真的很明显,而我只是没有看到,所以如果是的话,我很抱歉让它成为一个新问题.但任何帮助将不胜感激.

r rstudio shiny shiny-server

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

标签 统计

r ×2

benchmarking ×1

rstudio ×1

shiny ×1

shiny-server ×1