selectInput 선택에 반응하는 R 반짝이는 전달
반짝이는 앱 (RStudio 제공)의 서버 측에는 .NET Framework 의 콘텐츠를 구문 분석하여 변수 목록을 반환하는 반응이 textInput
있습니다. 그런 다음 변수 목록이 selectInput
및 / 또는 에서 사용됩니다 updateSelectInput
.
나는 그것을 작동시킬 수 없습니다. 어떤 제안?
나는 두 번의 시도를했다. 첫 번째 방법은 반응 형 outVar
을 selectInput
. 두 번째 방법은 반응 사용하는 것입니다 outVar
의를 updateSelectInput
. 둘 다 작동하지 않습니다.
server.R
shinyServer(
function(input, output, session) {
outVar <- reactive({
vars <- all.vars(parse(text=input$inBody))
vars <- as.list(vars)
return(vars)
})
output$inBody <- renderUI({
textInput(inputId = "inBody", label = h4("Enter a function:"), value = "a+b+c")
})
output$inVar <- renderUI({ ## works but the choices are non-reactive
selectInput(inputId = "inVar", label = h4("Select variables:"), choices = list("a","b"))
})
observe({ ## doesn't work
choices <- outVar()
updateSelectInput(session = session, inputId = "inVar", choices = choices)
})
})
ui.R
shinyUI(
basicPage(
uiOutput("inBody"),
uiOutput("inVar")
)
)
얼마 전 shiny-discuss에 같은 질문을 올렸지 만 관심이 거의 없었기 때문에 다시 한 번 질문하겠습니다. https://groups.google.com/forum/#!topic/shiny- 토론 / e0MgmMskfWo
편집 1
@Ramnath는 작동하는 것처럼 보이는 솔루션을 친절하게 게시했으며 Edit 2 라고 표시 했습니다. 그러나 그 해결책은 문제 가 내 문제에서와 같이 측면이 아닌 측면 textinput
에 있기 때문에 문제를 해결하지 못합니다 . 나는 이동하면 받는 사람 Ramnath의 두 번째 편집의 면이 문제 즉, 다시 작물 : 아무것도 쇼와 RStudio 충돌합니다. 나는 그 포장 발견 에 문제가 사라지게합니다.ui
server
textinput
server
input$text
as.character
편집 2
추가 논의에서 Ramnath는 outVar
인수가에서 반환되기 전에 서버가 동적 함수를 적용하려고 할 때 문제가 발생한다는 것을 보여주었습니다 textinput
. 해결책은 먼저 is.null(input$inBody)
존재 여부를 확인하는 것입니다.
인수의 존재를 확인하는 것은 반짝이는 앱을 구축하는 데있어 중요한 부분입니다. 그런데 왜 그렇게 생각하지 않았습니까? 글쎄요,하지만 뭔가 잘못한 게 틀림 없어요! 내가 문제에 보낸 시간을 고려할 때 쓰라린 경험입니다. 코드 뒤에 존재 여부를 확인하는 방법을 보여줍니다.
아래는 Ramnath의 코드가 옆 으로 textinput
이동 한 것 server
입니다. RStudio가 충돌하므로 집에서 시도하지 마십시오. (나는 그의 표기법을 사용했습니다)
library(shiny)
runApp(list(
ui = bootstrapPage(
uiOutput('textbox'), ## moving Ramnath's textinput to the server side
uiOutput('variables')
),
server = function(input, output){
outVar <- reactive({
vars <- all.vars(parse(text = input$text)) ## existence check needed here to prevent a crash
vars <- as.list(vars)
return(vars)
})
output$textbox = renderUI({
textInput("text", "Enter Formula", "a=b+c")
})
output$variables = renderUI({
selectInput('variables2', 'Variables', outVar())
})
}
))
내가 일반적으로 존재를 확인하는 방법은 다음과 같습니다.
if (is.null(input$text) || is.na(input$text)){
return()
} else {
vars <- all.vars(parse(text = input$text))
return(vars)
}
Ramnath의 코드는 더 짧습니다.
if (!is.null(mytext)){
mytext = input$text
vars <- all.vars(parse(text = mytext))
return(vars)
}
둘 다 작동하는 것 같지만 지금부터는 Ramnath의 방식으로 할 것입니다. 아마도 내 구성의 불균형 브래킷이 이전에 내가 확인 작업을 수행하지 못하게 했습니까? Ramnath의 수표는 더 직접적입니다.
마지막으로 다양한 디버깅 시도에 대해 몇 가지를 주목하고 싶습니다.
디버깅 퀘스트에서 서버 측에서 "출력"의 우선 순위를 "순위 지정"할 수있는 옵션이 있음을 발견했습니다. 문제를 해결하기 위해 탐색했지만 문제가 다른 곳에 있기 때문에 작동하지 않았습니다. 그래도 아는 것은 흥미롭고 현재로서는 잘 알려지지 않은 것 같습니다.
outputOptions(output, "textbox", priority = 1)
outputOptions(output, "variables", priority = 2)
그 퀘스트에서 나는 또한 시도했다 try
.
try(vars <- all.vars(parse(text = input$text)))
그것은 꽤 가깝지만 여전히 그것을 고치지 않았습니다.
내가 우연히 만난 첫 번째 해결책은 다음과 같습니다.
vars <- all.vars(parse(text = as.character(input$text)))
나는 그것이 왜 효과가 있는지 아는 것이 흥미로울 것이라고 생각합니다. 그것은 일을 충분히 느리게하기 때문입니까? null이 아닌 것을 as.character
"대기"하기 때문 input$text
입니까?
어떤 경우이던간에 Ramnath의 노력, 인내 및지도에 대해 매우 감사드립니다.
renderUI
동적 UI를 위해 서버 측 에서 사용해야 합니다. 다음은 최소한의 예입니다. 두 번째 드롭 다운 메뉴는 반응 적이며 첫 번째 드롭 다운 메뉴에서 선택한 데이터 세트에 맞게 조정됩니다. 이전에 반짝임을 다룬 적이 있다면 코드는 자명해야합니다.
runApp(list(
ui = bootstrapPage(
selectInput('dataset', 'Choose Dataset', c('mtcars', 'iris')),
uiOutput('columns')
),
server = function(input, output){
output$columns = renderUI({
mydata = get(input$dataset)
selectInput('columns2', 'Columns', names(mydata))
})
}
))
편집하다. 사용하는 다른 솔루션updateSelectInput
runApp(list(
ui = bootstrapPage(
selectInput('dataset', 'Choose Dataset', c('mtcars', 'iris')),
selectInput('columns', 'Columns', "")
),
server = function(input, output, session){
outVar = reactive({
mydata = get(input$dataset)
names(mydata)
})
observe({
updateSelectInput(session, "columns",
choices = outVar()
)})
}
))
EDIT2 : parse
. 이 앱에서 입력 한 텍스트 수식은 변수 목록으로 아래 드롭 다운 메뉴를 동적으로 채우는 데 사용됩니다.
library(shiny)
runApp(list(
ui = bootstrapPage(
textInput("text", "Enter Formula", "a=b+c"),
uiOutput('variables')
),
server = function(input, output){
outVar <- reactive({
vars <- all.vars(parse(text = input$text))
vars <- as.list(vars)
return(vars)
})
output$variables = renderUI({
selectInput('variables2', 'Variables', outVar())
})
}
))
지금까지 내가 말할 수있는 문제가 즉 input$inBody
검색하지 않는 character
짝수하지만 selectInput
함수는 주어진 character
즉, 값을 value = "a+b+c"
. 용액을 포장하는 것이다 input$inBody
(A)에as.character
다음 작업 :
observe
접근 방식 updateSelectInput
:
observe({
input$inBody
vars <- all.vars(parse(text=as.character(input$inBody)))
vars <- as.list(vars)
updateSelectInput(session = session, inputId = "inVar", choices = vars)
})
reactive
접근 방식 selectInput
:
outVar <- reactive({
vars <- all.vars(parse(text=as.character(input$inBody)))
vars <- as.list(vars)
return(vars)
})
output$inVar2 <- renderUI({
selectInput(inputId = "inVar2", label = h4("Select:"), choices = outVar())
})
Edit: I have edited my question with an explanation based on Ramnath's feedback. Ramnath has explained the problem and provided a better solution, which I give as an edit of my question. I'll keep this answer for the record.
server.R
### This will create the dynamic dropdown list ###
output$carControls <- renderUI({
selectInput("cars", "Choose cars", rownames(mtcars))
})
## End dynamic drop down list ###
## Display selected results ##
txt <- reactive({ input$cars })
output$selectedText <- renderText({ paste("you selected: ", txt() ,sep="") })
## End Display selected results ##
ui.R
uiOutput("carControls"),
br(),
textOutput("selectedText")
참고URL : https://stackoverflow.com/questions/21465411/r-shiny-passing-reactive-to-selectinput-choices
'programing tip' 카테고리의 다른 글
다른 저장소와 연결하는 github (0) | 2020.12.09 |
---|---|
"null"상수를 전달할 때 예외가 발생하지만 "null"문자열 참조를 전달할 때 예외가 발생하는 이유는 무엇입니까? (0) | 2020.12.09 |
목록 / 세부 정보보기 및 페이지 매김이있는 앱의 Redux 상태 모양을 선택하는 방법은 무엇입니까? (0) | 2020.12.09 |
C ++ 11 foreach 구문 및 사용자 지정 반복기 (0) | 2020.12.08 |
공통 변수를 Node.js의 개별 모듈에 전달하는 가장 좋은 방법은 무엇입니까? (0) | 2020.12.08 |