Parlak: $ operatörü atom vektörler için geçersiz

oy
1

Ben kullanıcı tıklamaları aracılığıyla filtreleme verilerini içeren Shiny ile serpme çizim göstermeye çalışıyorum. Ancak, bir hata alıyorum:

Uyarı: $ hata: $ operatör atom vektörler için geçersiz [Resim yığın izlemesi uygun]

Uyarı: renderUI hata: '객체 bulunabilir data_available'cannot [Resim yığın izlemesi uygun]

İşlerin ters gitti hiçbir fikrim yok. Aşağıda benim parlak uygulama için benim kodudur:

library(shiny)
library(ggplot2)
library(dplyr)

data_events <- read.csv(Desktop/athlete_events.csv)
df.physical <-data_events %>% select(Height,Weight,Sex,Year,Sport) %>% 
filter(!is.na(Height),!is.na(Weight))
df.physical <-as.data.frame(df.physical)

ui<- fluidPage(
  titlePanel(Distribution of Height/Weight for Each Sport),
  sidebarLayout(
    sidebarPanel(
      helpText(Create a scatter plot of height/weight for every sport in the 
Olympics.),

  htmlOutput(sport_selector),
  htmlOutput(year_selector),
  htmlOutput(sex_selector)

)
,
mainPanel(
  plotOutput(olmypicphysical))
  )
)
server=shinyServer(function(input,output){
  output$sport_selector = renderUI({
    selectInput(inputId=sport, label= Sport:, 
choices=as.character(unique(df.physical$Sport))
    )})
  output$year_selector = renderUI({
    data_available=df.physical[df.physical$Sport == input$sport, Year]
    selectInput(inputId = year, label=Year:, 
choices=unique(data_available$Year))
  })
  output$sex_selector = renderUI({
    data_available1=data_available[data_available$Year == input$year, Sex]
    selectInput(inputId = Sex,label=Sex:, 
choices=unique(data_available1$Sex))
    data_available2=data_available1[data_available1$Sex ==input$sex, 
Physical]
    output$olympicphysical = renderPlot({ 
ggplot(data_available2,aes(x=data_available2$Height,y=data_available2$Weight)
)+ geom_point()+theme_classic()+labs(x=Height,y=Weight)
    })
  })
})
shinyApp(ui = ui, server = server)

, Df.physical (tip listesidir) Ben oluşturduk veri kümesi aşağıdaki gibidir:

df.physical

Lütfen biri bana yardım edebilir mi?

Oluştur 27/11/2018 saat 18:10
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Kodunuzdaki ile oldukça bazı sorunlar vardır. Sorunuz hakkındadır $ operator is invalid for atomic vectors. Nitekim, bu seçim yönteminden kaynaklanır. Öncelikle data.frame dışında bir vektör seçmek ve bunu data.frame vardı bu isimde tekrar vektör subsetine deneyin yanındaki.

Temelde iki kez aynı seçimi uygulamak deneyin. Kolay düzeltme ilk seçimde sütun adını bırakmaktır:

data_available=df.physical[df.physical$Sport == input$sport, ]

Buna ek olarak, ben kullandığınız neden emin değilim htmlOutputbirlikte renderUI. Bir de / güncellemek seçimlerinizi sınırlamak isterseniz selectInputsadece fonksiyonunu kullanabilirsiniz updateSelectInputbirlikte ObserveEvent. Bu uygulama daha okunabilir ve daha az hata eğilimli hale getirir.

Çalışma örneği:

library(shiny)
library(ggplot2)

ui<- fluidPage(
  titlePanel("Distribution of Height/Weight for Each Sport"),
  sidebarLayout(
    sidebarPanel(
      helpText("Create a scatter plot of height/weight for every sport in the 
               Olympics."),
      selectInput("sport_selector", choices=c(''), label='Sport:'),
      selectInput("year_selector", choices=c(''), label='Year:'),
      selectInput("sex_selector", choices=c(''), label='Sex:')
      )
    ,
    mainPanel(
      plotOutput("olympicphysical"))
  )
)

server<-shinyServer(function(input,output, session){
  df.physical = data.frame(Height=c(170,180),Weight=c(80,80),Sex=c('M','F'), Year=c(1992,2012), Sport=c('Basketball', 'Judo'))

  updateSelectInput(session, 'sport_selector', choices = unique(df.physical$Sport))

  observeEvent(input$sport_selector, {
    df.physical_subset = subset(df.physical, Sport == input$sport_selector)
    updateSelectInput(session, 'year_selector', choices = unique(df.physical_subset$Year))
  })

  observeEvent({input$year_selector}, {
    df.physical_subset = subset(df.physical, Sport == input$sport_selector & Year == input$year_selector)
    updateSelectInput(session, 'sex_selector', choices = unique(df.physical_subset$Sex))
  })

  observeEvent({input$sex_selector},{
    df.physical_subset <- subset(df.physical, Sport == input$sport_selector & Year == input$year_selector & Sex==input$sex_selector)
    print(df.physical_subset)
    output$olympicphysical = renderPlot({
      ggplot(df.physical_subset,aes(x=df.physical_subset$Height,y=df.physical_subset$Weight)
      )+ geom_point()+theme_classic()+labs(x="Height",y="Weight")})
  })
})

shinyApp(ui = ui, server = server)
Cevap 29/11/2018 saat 09:18
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more