Я пытаюсь создать блестящее приложение проекта, который я закончил реализовывать в R локально. У меня проблемы с синтаксисом указанной реализации, особенно с реактивными входами.
Когда я писал код локально, у меня есть три пользовательские функции: анализ возврата, визуализация и MCS с соответствующими входными данными. Первый, AnalysisofReturn принимает строку для ввода из списка («Ежедневно», «Еженедельно», «Ежемесячно», «Ежеквартально», «Ежегодно») и работает с ним оттуда. Если я могу понять, что я делаю неправильно в этом случае, я вполне уверен, что смогу реализовать две другие функции самостоятельно. Моим первым испытанием было отделить базовый код от ui.R и server.R, что не сработало. Затем я взял UDF в server.R, и он показал обещание. Насколько я понимаю, семейство функций рендеринга по умолчанию является реактивным, и поскольку используемая мной функция является UDF, мне нужно было перевести ее в реактивное состояние. В UDF я сделал вызов своему фрейму данных «myTable», так как должен был вызвать функцию, которая разрешила проблему поднабора, которую я получил. Я получил код, выполняющийся в один момент, когда я удалил 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)})
}
Я ожидаю, что на приборной панели отобразится таблица результатов. Но я получаю сообщение об ошибке
Предупреждение: Ошибка в <-: неверная (NULL) левая сторона назначения [Нет трассировки стека] </p>