UI代码:
===
这是我想做的事情。代码将有一个初始文本框和提交按钮。用户在第一个输入文本中放入文本,单击提交按钮,在主面板中生成新文本。用户可以多次进行此操作,在主面板中创建多个文本输入框。
另外,我还有一个静态的名为“工作负载”的另一个inputText框位于主面板顶部。
所以,这就是我想做的:
1.用户将数据插入工作负载textIntut(它需要是数字)中。 2.用户将数据插入其他动态生成的textInput框中(所有内容都需要是数字)。 3.我将从工作负载和所有其他文本框中获取值,进行一些计算和投影,并在每个动态生成的textInput框旁边显示数据。如果我可以在生成的文本框旁边插入文本框来显示我的输出,那将是很棒的。
例如,我在我的工作负载中有数据,我已经生成了Web_server、App_server textInput框。我将从工作负载中获取数据,并将其除以web_server中的数据,然后在web_server textInput框旁边显示它(在文本框中显示数据),对app_server textInput框执行相同的操作。
你有任何想法如何在shiny中实现这个功能吗?这是我试图完成的图片。给定从用户那里获取的工作负载增长率和用户输入部分的其他输入,我必须计算并填写相应的文本框。
===
library(shiny)
shinyUI(
# Use a fluid Bootstrap layout
fluidPage(
# Generate a row with a sidebar
sidebarLayout(
# Define the sidebar with one input
sidebarPanel(
sliderInput("capacity", "Current Capacity:",
min=0, max=100, value=10),
c(list(
textInput("service", "Service Component Name", ""),
actionButton("addbtn", "Add Component"))),
#lapply(seq(10), function(i) uiOutput(paste0("ui", i)))
br(),
br(),
br(),
br(),
br(),
actionButton("calcbtn", "Calculate Projection")
),
# Create a spot for the barplot
mainPanel(
textInput("inputWork","Volume", width="200px"),
textInput("inputGrowth","Growth Rate", width="100px"),
lapply(seq(10), function(i) uiOutput(paste0("ui", i)))
#tags$p("Web"),
#verbatimTextOutput("input_type_text")
)
)
)
)
服务器代码:
server <- function(input, output)
{
observeEvent(input$addbtn, {
n <- isolate(input$addbtn)
if (n == 0) return()
# create n-th pair of text input and output
output[[paste0("ui", n)]] <- renderUI(
list(textInput(paste0("textin", n), isolate(input$service)),
textOutput(paste0("textout", n))))
# display something in the output
output[[paste0("textout", n)]] <- renderText({
work<-as.numeric(input$inputWork)
growth<-as.numeric(input$inputGrowth)
print(growth)
#paste("projection", (100+growth)*as.numeric(input[[paste0("textin", n)]]))
})
})
observeEvent(input$calcbtn, {
n <- isolate(input$calcbtn)
if (n == 0) return()
output[[paste0("textout", n)]] <- renderText({
work<-as.numeric(input$inputWork)
growth<-as.numeric(input$inputGrowth)
project<-growth+as.numeric(input$service)
print(growth)
print(project)
paste("projection", ((1+growth/100)*as.numeric(input[[paste0("textin", n)]])))
})
})
}
这是我想做的事情。代码将有一个初始文本框和提交按钮。用户在第一个输入文本中放入文本,单击提交按钮,在主面板中生成新文本。用户可以多次进行此操作,在主面板中创建多个文本输入框。
另外,我还有一个静态的名为“工作负载”的另一个inputText框位于主面板顶部。
所以,这就是我想做的:
1.用户将数据插入工作负载textIntut(它需要是数字)中。 2.用户将数据插入其他动态生成的textInput框中(所有内容都需要是数字)。 3.我将从工作负载和所有其他文本框中获取值,进行一些计算和投影,并在每个动态生成的textInput框旁边显示数据。如果我可以在生成的文本框旁边插入文本框来显示我的输出,那将是很棒的。
例如,我在我的工作负载中有数据,我已经生成了Web_server、App_server textInput框。我将从工作负载中获取数据,并将其除以web_server中的数据,然后在web_server textInput框旁边显示它(在文本框中显示数据),对app_server textInput框执行相同的操作。
你有任何想法如何在shiny中实现这个功能吗?这是我试图完成的图片。给定从用户那里获取的工作负载增长率和用户输入部分的其他输入,我必须计算并填写相应的文本框。
calcbtn
在 UI 中已经定义,当你点击它时,预期的行为是什么?这会更新所有动态创建的 textOutput 吗,还是只更新其中一个? - Kota Moriui.R
和server.R
。这样会让人们需要创建一个文件夹,并创建两个文件来尝试您的代码。相反,准备一组代码,人们可以简单地将其复制到他或她的编辑器中并运行它。 - Kota Mori