for reactive函数中的循环:子分配类型修复中的不兼容类型(从闭包到逻辑)
我从闪亮的应用程序开始,希望在闪亮的应用程序中创建一个信用计算器。但是,实现for循环来创建输出数据似乎有问题 用户界面 服务器for reactive函数中的循环:子分配类型修复中的不兼容类型(从闭包到逻辑),r,dataframe,for-loop,shiny,reactive-programming,R,Dataframe,For Loop,Shiny,Reactive Programming,我从闪亮的应用程序开始,希望在闪亮的应用程序中创建一个信用计算器。但是,实现for循环来创建输出数据似乎有问题 用户界面 服务器 library(shiny) library(dplyr) shinyServer( function(input, output){ mthl.inter = reactive((input$yr.inter/1200)) # NUMERIC INPUT credit.amount = reactive(input$credit.amount)
library(shiny)
library(dplyr)
shinyServer(
function(input, output){
mthl.inter = reactive((input$yr.inter/1200)) # NUMERIC INPUT
credit.amount = reactive(input$credit.amount) # SLIDER INPUT
mthl.rate = reactive(input$mthl.rate) # NUMERIC INPUT
# calculate repayment time
credit.decay = reactive(
as.numeric((log(1 - (mthl.inter() * credit.amount() / mthl.rate())) /
log(1 + mthl.inter())) * -1)
)
# calculate credit model
credit.model <- reactive({
credit.df <- data.frame(rep(NA, credit.decay() %>% ceiling()))
credit.df[1,1] <- credit.amount
for (n in 2:(credit.decay() %>% ceiling()) ){
credit.df[n,1] = credit.df[n-1,1] * (1 + mthl.inter()) - mthl.rate()
}
return(credit.df)
})
output$decaytime = renderText(credit.decay() %>% ceiling())
output$creditmod = renderTable(credit.model())
}
)
库(闪亮)
图书馆(dplyr)
shinyServer(
功能(输入、输出){
mthl.inter=无功((输入$yr.inter/1200))#数字输入
credit.amount=被动(输入$credit.amount)#滑块输入
mthl.rate=无功(输入$mthl.rate)#数字输入
#计算还款时间
信用衰减=反应性(
as.numeric((日志(1-(mthl.inter()*credit.amount()/mthl.rate())/
日志(1+mthl.inter())*-1)
)
#计算信用模型
credit.model%上限()
输出$creditmod=可渲染(credit.model())
}
)
这将返回以下错误:
Warning: Error in <-: incompatible types (from closure to logical) in subassignment type fix
警告:欢迎使用stackoverflow中出现错误
您需要req()
来确保没有空的用户输入传递给您的函数。
此外,我取消了您输入的公告以稍微延迟计算(因此用户有一些时间在计算开始之前完成输入)
然而,您的计算似乎只适用于credit.amount和mthl.rate的某些比率。您可能需要在此处添加一些进一步的检查
请检查以下内容:
library(shiny)
library(dplyr)
ui <- fluidPage(
titlePanel("Farm Statistic"), # TITLE CONTENT
sidebarLayout(
sidebarPanel(("Enter your Farm Information here"),
numericInput("credit_amount",
"How much is your credit?",
NA),
sliderInput("yr_inter",
"Interrest rate p.a.",
min = 0.5,
max = 20,
value = 8.5,
step = 0.5
),
numericInput("mthl_rate",
"Your monthly payment",
NA)
), # SIDE BAR CONTENT
mainPanel(("Credit decay"),
textOutput("decaytime"),
tableOutput("creditmod")
# , textOutput("")
) # MAIN PANEL CONTENT
)
)
server <- function(input, output, session) {
mthl.inter.tmp <- reactive({req(input$yr_inter/1200)}) # NUMERIC INPUT
credit.amount.tmp <- reactive({req(input$credit_amount)}) # SLIDER INPUT
mthl.rate.tmp <- reactive({req(input$mthl_rate)}) # NUMERIC INPUT
mthl.inter <- debounce(mthl.inter.tmp, 500)
credit.amount <- debounce(credit.amount.tmp, 500)
mthl.rate <- debounce(mthl.rate.tmp, 500)
# calculate repayment time
credit.decay = reactive({
req(mthl.inter(), credit.amount(), mthl.rate())
as.numeric((log(1 - (mthl.inter() * credit.amount() / mthl.rate())) / log(1 + mthl.inter())) * -1)
})
# calculate credit model
credit.model <- reactive({
req(credit.decay())
credit.df <- data.frame(rep(NA, credit.decay() %>% ceiling()))
credit.df[1,1] <- credit.amount()
for (n in 2:(credit.decay() %>% ceiling()) ){
credit.df[n,1] = credit.df[n-1,1] * (1 + mthl.inter()) - mthl.rate()
}
return(credit.df)
})
output$decaytime = renderText(credit.decay() %>% ceiling())
output$creditmod = renderTable(credit.model())
}
shinyApp(ui, server)
库(闪亮)
图书馆(dplyr)
欢迎来到stackoverflow
您需要req()
来确保没有空的用户输入传递给您的函数。
此外,我取消了您输入的公告以稍微延迟计算(因此用户有一些时间在计算开始之前完成输入)
然而,您的计算似乎只适用于credit.amount和mthl.rate的某些比率。您可能需要在此处添加一些进一步的检查
请检查以下内容:
library(shiny)
library(dplyr)
ui <- fluidPage(
titlePanel("Farm Statistic"), # TITLE CONTENT
sidebarLayout(
sidebarPanel(("Enter your Farm Information here"),
numericInput("credit_amount",
"How much is your credit?",
NA),
sliderInput("yr_inter",
"Interrest rate p.a.",
min = 0.5,
max = 20,
value = 8.5,
step = 0.5
),
numericInput("mthl_rate",
"Your monthly payment",
NA)
), # SIDE BAR CONTENT
mainPanel(("Credit decay"),
textOutput("decaytime"),
tableOutput("creditmod")
# , textOutput("")
) # MAIN PANEL CONTENT
)
)
server <- function(input, output, session) {
mthl.inter.tmp <- reactive({req(input$yr_inter/1200)}) # NUMERIC INPUT
credit.amount.tmp <- reactive({req(input$credit_amount)}) # SLIDER INPUT
mthl.rate.tmp <- reactive({req(input$mthl_rate)}) # NUMERIC INPUT
mthl.inter <- debounce(mthl.inter.tmp, 500)
credit.amount <- debounce(credit.amount.tmp, 500)
mthl.rate <- debounce(mthl.rate.tmp, 500)
# calculate repayment time
credit.decay = reactive({
req(mthl.inter(), credit.amount(), mthl.rate())
as.numeric((log(1 - (mthl.inter() * credit.amount() / mthl.rate())) / log(1 + mthl.inter())) * -1)
})
# calculate credit model
credit.model <- reactive({
req(credit.decay())
credit.df <- data.frame(rep(NA, credit.decay() %>% ceiling()))
credit.df[1,1] <- credit.amount()
for (n in 2:(credit.decay() %>% ceiling()) ){
credit.df[n,1] = credit.df[n-1,1] * (1 + mthl.inter()) - mthl.rate()
}
return(credit.df)
})
output$decaytime = renderText(credit.decay() %>% ceiling())
output$creditmod = renderTable(credit.model())
}
shinyApp(ui, server)
库(闪亮)
图书馆(dplyr)
非常感谢您的帮助和努力添加一些细节。作为学习者,学习好的例子总是有帮助的不客气!我只是想解释一下为什么我重命名了您的输入:您应该尽量避免在输入名称中使用句点,因为它们在JavaScript中是特殊字符。请参阅注释
-干杯非常感谢您的帮助和为添加一些详细信息所做的努力。作为学习者,学习好的例子总是有帮助的不客气!我只是想解释一下为什么我重命名了您的输入:您应该尽量避免在输入名称中使用句点,因为它们在JavaScript中是特殊字符。请参见注释
-干杯