在Shiny server.r中正确实现UDF。>

问题描述 投票:0回答:1

我正在尝试为已经在R中本地实现的项目构建闪亮的应用程序。我在上述实现的语法上有问题,特别是在反应式输入方面。

当我在本地编写代码时,我有三个用户定义的函数-AnalysisofReturn,Visualizations和MCS,以及它们各自的输入。第一个是AnalysisofReturn,它从列表(“每日”,“每周”,“每月”,“季度”,“每年”)​​中输入一个字符串作为输入,然后从那里进行处理。如果我能理解我在这种情况下做错了什么,那么我很确定自己可以实现另外两个功能。我的第一个尝试是将基本代码与ui.R和server.R分开,后者不起作用。然后我将UDF放入server.R,它显示出了希望。据我了解,默认情况下,渲染功能族是反应性的,并且由于我使用的功能是UDF,因此我需要将其强制为反应性状态。在UDF中,我调用了我的数据框“ myTable”,因为我应该调用一个函数,该函数解决了我遇到的子集问题。当我这样删除UDF并分别进行操作时,我使代码在某一时刻运行,但是在这种情况下并没有呈现表。但是它应该与UDF一起使用,因为将来我将要创建更多的UDF,而且我也不想编写混乱的代码。我将在此添加数据集的一部分。我正在使用Shinydashboard作为模板,这对生成页面本身没有问题。

Frequency   Date        ETF Index     Underlying Index

Daily       02/06/2009  60            1361.36
Daily       03/06/2009  56.41         1338
Daily       04/06/2009  57.27         1328.86
Daily       05/06/2009  55.72         1321.77

Weekly      05/06/2009  55.72         1321.77
Weekly      12/06/2009  58.38         1347.5
Weekly      19/06/2009  54.72         1305.8
Weekly      26/06/2009  54.74         1305.82

Monthly     30/06/2009  54.26         1307.16
Monthly     31/07/2009  65.28         1425.4
Monthly     31/08/2009  70.71         1498.97
Monthly     30/09/2009  76.18         1552.84

Quarterly   30/06/2009  54.26         1307.16
Quarterly   30/09/2009  76.18         1552.84
Quarterly   31/12/2009  77.99         1580.77
Quarterly   31/03/2010  79.96         1584.28

Yearly      31/12/2009  77.99         1580.77
Yearly      31/12/2010  85.23         1658.3
Yearly      30/12/2011  58.8          1412.55
Yearly      31/12/2012  79.11         1604

ui.R

dHeader <- dashboardHeader(title="Leveraged ETF")

dSidebar <- dashboardSidebar(

                            selectInput(
                              "Frequency",
                              label = h3("Frequency"),
                              choices = list("Daily" = "Daily", "Weekly" = "Weekly", "Monthly" = "Monthly", "Quarterly" = "Quarterly", "Yearly" = "Yearly"),
                              selected = "Yearly"),

                            selectInput(
                              "Task",
                              label = h3("Task"),
                              choices = list("Back Testing" = "backTesting", "Monte Carlo Simulation" = "monteCarloSimulation"),
                              selected = "Back Testing"),

                            conditionalPanel("input.Task=='backTesting'",
                                             selectInput("displayedOutputs",label=h3("Results"),
                                                         choices=list("First 9 values"="nineValues","Summary Statistics"="summaryStatistics","Charts"="charts"),
                                                         selected="First 9 values")),

                            conditionalPanel("input.Task=='monteCarloSimulation'",
                                             selectInput("displayedOutputs",label=h3("Results"),
                                                         choices=list("Simulations"="simulations","Simulation Graph"="simulationGraph"),
                                                         selected="Simulations"))

           )

dBody <- dashboardBody(tableOutput('Results')

)
ui <-     dashboardPage(dHeader,dSidebar,dBody)

server.R

server <- function(input, output, session) {
    #______________________________________________________________
    AnalysisofReturn <- function(Freq)                                          #Function to calculate all the relevant, time point-to-time point data
    {

        setwd("//SPVIPH07/testvip0002/03.Individual/Ramachandran/Shiny Practice")

        InputData <- as.data.frame(read.csv("Input/Dataset for R.csv",header=TRUE))

        myTable <- reactive({subset(InputData,ï..Frequency==Freq)})

        myTable()$ï..Frequency <- NULL

        myTable()$Date <- as.Date(myTable()$Date,format='%d/%m/%Y',origin="1970-01-01")

        myTable()$ETF.Return <- as.numeric(c("-",diff(log(myTable()$ETF.Index))))

        myTable()$Index.Return <- as.numeric(c("-",diff(log(myTable()$Underlying.Index))))

        myTable()$Multiple <- myTable()$ETF.Return/myTable()$Index.Return
        myTable()$Non.Regular.Movement <- ifelse(myTable()$Multiple<0,1,0)
        myTable()$Non.Regular.Positive.Movements <- ifelse(myTable()$Non.Regular.Movement==1 & myTable()$ETF.Return>0,1,0)
        myTable()$Absolute.Deviation.From.Ideal.In.Basis.Points <- round(abs(myTable()$ETF.Return-(2*myTable()$Index.Return))*10000,digits=0)


    }


    output$Results <- renderDataTable({AnalysisofReturn(input$Frequency)})


}

我希望仪表板向我显示结果表。但我收到错误消息

警告:错误

我正在尝试为已经在R中本地实现的项目构建闪亮的应用程序。我在上述实现的语法上有问题,特别是在反应式输入方面。当...

r shiny shinydashboard
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.