基于先前无功输出的新下拉输入 - R Shiny
New dropdown inputs based on previous reactive Output - R Shiny
这是我的第一个 Shiny 应用程序。
我正在尝试构建一个仪表板,用于查找协整的股票并使用它们预测价格。
注意 - 我知道页码在代码中并不重要,我仅将其用作下面的参考。
仪表盘的流程如下-
第 1 页 - Select 股票(例如股票“A”)-> 绘图 -> 结构断裂 -> 单位根 -> 查找协整对
第 1 页没有问题。
第 2 页 -> Select 与股票 A 协整的股票(由第 1 页的协整对填充的下拉列表。也应允许 0 个对象,因为该股票可能不与任何股票协整)
问题 - 如何从第 1 页检索协整对列表并将其用作第 2 页下拉菜单的输入?
下面是创建协整对列表的代码。我使用 renderPrint 在第 1 页显示输出。
Coin <- reactive({
req(input$Stock_Sym)
Sym <- input$Stock_Sym
remove(Row)
remove(Col)
if (Sym %in% Stseries$Stseries) {
print("The Stock is stationary and cannot have cointegrating relationship")
} else if (Sym %in% Useries$Useries) {
Row <- as.data.frame(Jou[,Sym])
rownames(Row) <- rownames(Jou)
Col <- as.data.frame(Jou[Sym,])
Col <- as.data.frame(t(Col))
rownames(Col) <- colnames(Jou)
CopairsR <- rownames(Row)[Row[,1]=="Yes"]
CopairsC <- rownames(Col)[Col[,1]=="Yes"]
CopairsU <- c(unique(CopairsR, CopairsC))
CopairsU <- ifelse(length(CopairsU)==0, print("The Stock is not cointegrated with any other stock"), print(CopairsU))
} else if (Sym %in% Eseries$Eseries) {
Row <- as.data.frame(Joe[,Sym])
rownames(Row) <- rownames(Joe)
Col <- as.data.frame(Joe[Sym,])
Col <- as.data.frame(t(Col))
rownames(Col) <- colnames(Joe)
CopairsR <- rownames(Row)[Row[,1]=="Yes"]
CopairsC <- rownames(Col)[Col[,1]=="Yes"]
CopairsE <- c(CopairsR, CopairsC)
CopairsE <- unique(CopairsE)
CopairsE <- ifelse(length(CopairsE)==0, print("The Stock is not cointegrated with any other stock"), print(CopairsE))
} else {
print("The stock either do not have enough Observation or is not I(1)")
}
})
output$`Possible Pairs` <- renderPrint({
Coin <- Coin()
})
下面是第 2 页下拉菜单的代码 - 这不起作用。它只给了我一个值,这是你在股票“A”的情况下看到的第一个值。
#Input - Pair Selection
observe({
updateSelectInput(session, "Pair_Sym" , choices = Coin())
})
Page 1
Page 2
编辑 - 数据和整个代码可以在这里找到。 https://github.com/AvisR/Shiny
这是因为 CopairsE <- unique(CopairsE)
returns 是一个带引号的字符向量。您可以通过 debugging your Shiny app.
验证对象的类型
尝试使用 noquote()
函数和 return 结果到 Coin()
反应:
CopairsE <- unique(CopairsE)
vars <- noquote(CopairsE)
CopairsE <- ifelse(length(CopairsE)==0, print("The Stock is not cointegrated with any other stock"), print(CopairsE))
return(vars)
这是我的第一个 Shiny 应用程序。
我正在尝试构建一个仪表板,用于查找协整的股票并使用它们预测价格。
注意 - 我知道页码在代码中并不重要,我仅将其用作下面的参考。
仪表盘的流程如下-
第 1 页 - Select 股票(例如股票“A”)-> 绘图 -> 结构断裂 -> 单位根 -> 查找协整对
第 1 页没有问题。
第 2 页 -> Select 与股票 A 协整的股票(由第 1 页的协整对填充的下拉列表。也应允许 0 个对象,因为该股票可能不与任何股票协整)
问题 - 如何从第 1 页检索协整对列表并将其用作第 2 页下拉菜单的输入?
下面是创建协整对列表的代码。我使用 renderPrint 在第 1 页显示输出。
Coin <- reactive({
req(input$Stock_Sym)
Sym <- input$Stock_Sym
remove(Row)
remove(Col)
if (Sym %in% Stseries$Stseries) {
print("The Stock is stationary and cannot have cointegrating relationship")
} else if (Sym %in% Useries$Useries) {
Row <- as.data.frame(Jou[,Sym])
rownames(Row) <- rownames(Jou)
Col <- as.data.frame(Jou[Sym,])
Col <- as.data.frame(t(Col))
rownames(Col) <- colnames(Jou)
CopairsR <- rownames(Row)[Row[,1]=="Yes"]
CopairsC <- rownames(Col)[Col[,1]=="Yes"]
CopairsU <- c(unique(CopairsR, CopairsC))
CopairsU <- ifelse(length(CopairsU)==0, print("The Stock is not cointegrated with any other stock"), print(CopairsU))
} else if (Sym %in% Eseries$Eseries) {
Row <- as.data.frame(Joe[,Sym])
rownames(Row) <- rownames(Joe)
Col <- as.data.frame(Joe[Sym,])
Col <- as.data.frame(t(Col))
rownames(Col) <- colnames(Joe)
CopairsR <- rownames(Row)[Row[,1]=="Yes"]
CopairsC <- rownames(Col)[Col[,1]=="Yes"]
CopairsE <- c(CopairsR, CopairsC)
CopairsE <- unique(CopairsE)
CopairsE <- ifelse(length(CopairsE)==0, print("The Stock is not cointegrated with any other stock"), print(CopairsE))
} else {
print("The stock either do not have enough Observation or is not I(1)")
}
})
output$`Possible Pairs` <- renderPrint({
Coin <- Coin()
})
下面是第 2 页下拉菜单的代码 - 这不起作用。它只给了我一个值,这是你在股票“A”的情况下看到的第一个值。
#Input - Pair Selection
observe({
updateSelectInput(session, "Pair_Sym" , choices = Coin())
})
Page 1 Page 2
编辑 - 数据和整个代码可以在这里找到。 https://github.com/AvisR/Shiny
这是因为 CopairsE <- unique(CopairsE)
returns 是一个带引号的字符向量。您可以通过 debugging your Shiny app.
尝试使用 noquote()
函数和 return 结果到 Coin()
反应:
CopairsE <- unique(CopairsE)
vars <- noquote(CopairsE)
CopairsE <- ifelse(length(CopairsE)==0, print("The Stock is not cointegrated with any other stock"), print(CopairsE))
return(vars)