在Shiny server.r中正确实现UDF

我正在尝试为已在本地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'",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,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)})


}

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

  

警告:错误

qq492096437 回答:在Shiny server.r中正确实现UDF

您应该能够保留本地脚本中的原始功能。将它们保存在global.Rserver.R所在目录的文件ui.R中。这些将可用于您闪亮的应用程序,您可以将服务器文件简化为:

server <- function(input,output,session) {


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


}

全局文件如下所示:

library(shiny)
library(shinydashboard)

AnalysisofReturn <- function(Freq)                                          #Function to calculate all the relevant,time point-to-time point data
{



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

    myTable <- 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,0)
    myTable$Absolute.Deviation.From.Ideal.In.Basis.Points <- round(abs(myTable$ETF.Return-(2*myTable$Index.Return))*10000,digits=0)


}

此外,只要数据保存在应用程序文件夹中即可,因此无需设置工作目录,因此位于read.csv(Input/Dataset for R.csv)上。

本文链接:https://www.f2er.com/3160189.html

大家都在问