我是新生的闪亮的反应部分。我尝试编写一个代码,其中有一个很大的反应函数,在里面,我有另一个反应函数,它根据滑块输入而改变。是否有可能在其他内部写一个被动反应,因为如果是我的代码不运行?在另一个反应中写入反应是否是一个好习惯?
这是我的代码:
dt <- reactive({
con = dbConnect(MySQL(), user='root', password='root', db='simulator', host='localhost')
size <- reactive({dbGetQuery( con, statement = paste(" Select count(*) from event where event_type = 'pe_send_flit' and run_id = ",input$run))})
j = (size()$`count(*)`) - 1
a <- j
b <- j
for(i in 0:j)
{
a[i] <- dbGetQuery(con, statement = paste(" Select event_time from event where event_type = 'pe_receive_flit' and run_id = ",input$run," and event_data =", i,"order by event_data asc"))
b[i] <- dbGetQuery(con, statement = paste(" Select event_time from event where event_type = 'pe_send_flit' and run_id = ",input$run," and event_data =",i,"order by event_data asc"))
}
receive <- as.vector(a,mode='numeric')
send <- as.vector(b,mode='numeric')
difference = receive - send
len = length(difference)
avg = 0.0
sum_f = 0
counter = 1
xrange <- vector(mode = "numeric", length = len)
yrange <- vector(mode = "numeric", length = len)
for (k in 1:len)
{
temp = receive[k]
sum_f = difference[k]
l = k + 1
for(m in l:len)
{
if(isTRUE(all.equal(temp,receive[m])))
{
sum_f = sum_f + difference[m]
counter = counter + 1
receive[m] = 0
difference[m] = 0
}
}
avg = sum_f/counter
xrange[k] = receive[k]
yrange[k] = avg
}
xrange <- xrange[xrange!=0]
yrange <- yrange[yrange!=0.000]
xrange <- xrange[!is.na(xrange)]
yrange <- yrange[!is.na(yrange)]
array_length = length(xrange)
ind <- sort(xrange,index.return = TRUE)$ix
xrange <- xrange[ind]
yrange <- yrange[ind]
myfunction <- function(pa,val,x)
{
y = x - 1
tmp = pa*y
sm = tmp + val
incr = y + 1
result = sm/incr
return(result)
}
incremental_average <- vector(mode = "numeric",length = array_length)
pa = as.integer(0)
for(r in 1:array_length)
{
pa = myfunction(pa,yrange[r],r)
incremental_average[r] = pa
}
dbDisconnect(con)
df <- data.frame(xrange,incremental_average)
dat <- reactive({
if(!is.null(input$range))
{
test <- df[df$xrange %in% seq(from=input$range[1],to=input$range[2]),]
test
}
})
df
})
如何使用'dat'反应部分?
答案 0 :(得分:0)
将此位拉出并重写为
dat <- reactive({
if(!is.null(input$range)) {
test <- dt()[dt()$xrange %in% seq(from=input$range[1],to=input$range[2]),]
test
}
})
现在你的dt()函数返回数据(实际上只是加载它),但你的dat()函数返回过滤后的数据。