كيف يتم تمرير البيانات من التعبير لامعة رد الفعل لمؤامرة غفيس?

StackOverflow https://stackoverflow.com//questions/25011544

  •  20-12-2019
  •  | 
  •  

سؤال

أنا التعرف على غفيس وأنا أحاول استخدامه في لامعة.أواجه مشكلة في فهم كيفية غفيس يحصل على البيانات من التعبير لامعة رد الفعل.هنا هو التطبيق الأساسي من جيفيس جيثب مستودع:

واجهة المستخدم.R:

shinyUI(pageWithSidebar(
  div(),
  sidebarPanel(
    sliderInput("n", "Number of points", min = 1, max = nrow(mtcars),
                value = 10, step = 1),
    uiOutput("plot_ui")
  ),
  mainPanel(
    ggvisOutput("plot"),
    tableOutput("mtc_table")
  )
))

الخادم.R:

library(ggvis)

shinyServer(function(input, output, session) {
  # A reactive subset of mtcars
  mtc <- reactive({ mtcars[1:input$n, ] })

  # A simple visualisation. In shiny apps, need to register observers
  # and tell shiny where to put the controls
  mtc %>%
    ggvis(~wt, ~mpg) %>%
    layer_points() %>%
    bind_shiny("plot", "plot_ui")

  output$mtc_table <- renderTable({
    mtc()[, c("wt", "mpg")]
  })
})

الآن mtc هو التعبير التفاعلي الذي هو في الواقع وظيفة (أم أنه?) ، والنتيجة هي البيانات.الإطار.ومع ذلك هو الأنابيب إلى غفيس كدالة.إذا حاولت تمرير البيانات الناتجة.الإطار مثل

mtc() %>%  ggvis(~wt, ~mpg) %>%
layer_points() %>%
        bind_shiny("plot", "plot_ui")

سيبدأ لامعة في الشكوى على غرار أن "العملية غير مسموح بها بدون سياق تفاعلي نشط".إذن ما الذي يحدث بالفعل?

السبب أنا أسأل هو أنني أود أن أعود الكائنات الإضافية التي أريد استخدامها في غفيس.لكي أكون أكثر دقة ، أريد تغيير تسميات المحور س و ص ، حيث يتم حساب التسميات في الداخل في التعبير التفاعلي ، شيء من هذا القبيل:

mtc <- reactive({ list(data=mtcars[1:input$n, ],
labx = "Computed x axis label",
laby = "Computed y axis label")
   })

mtc %>% ggvis(data=data,~wt,~mpg) %>% 
    layer_points() %>%
    add_axis("x",title=labx) %>%
    add_axis("y",title=laby) %>%
    bind_shiny("plot", "plot_ui")

هل من الممكن استغلال هيكل بطريقة أو بأخرى mtc() الإخراج داخل دعوة غفيس?أو أنه من الممكن فقط لتمرير البيانات.الإطار ثم وضع البيانات الخاصة بك في البيانات.الإطار?

أم أن هناك طريقة أخرى لتسجيل كائن غفيس?في هذا السؤال يتم تسجيل الناتج غفيس مع observe_ggvis وظيفة ، ولكن يبدو أنه غير موجود في الإصدار الحالي غفيس (0.3).

أنا باستخدام غفيس الإصدار 0.3.0.1 وبراقة 0.10.0 على ص 3.1.1

هل كانت مفيدة؟

المحلول

يمكن تمرير غفيس" التفاعلات العارية " لمجموعة البيانات.عند القيام بذلك سوف غفيس إعادة تخطيط البيانات تلقائيا عندما يتغير ولكن لا تحتاج إلى إعادة تخطيط المؤامرة بأكملها:

get_rct_df = reactive({  #code to change dataset from shiny input  )}
get_rct_df %>% ggvis() #rest of plotting code %>% bind_shiny("plot")

سيؤدي هذا إلى تحديث نقاط البيانات في المخطط (ولكن ليس إعادة رسم المخطط بأكمله) في كل مرة تتغير فيها البيانات من جيت_ركت_دف.هذا يعني أيضا أنه لا يمكن تحديث أشياء معينة دون إعادة رسم الحبكة بأكملها (تسميات الحبكة ، معادلات توقعات نموذج الطبقة).

يمكنك أن تفعل اقتراح آخر والتفاف المؤامرة بأكملها في رد الفعل:

reactive({
   get_rct_df %>% 
      ggvis() #rest of plotting code %>% 
      add_axis("x", title = input$title)
}) %>% bind_shiny("plot")

سيسمح لك ذلك بتحديث عناوين الحبكة وأجزاء أخرى من الحبكة.ولكنه يجبر أيضا غفيس على إعادة رسم المؤامرة بأكملها عندما يتغير شيء بدلا من مجرد إعادة تخطيط البيانات.إذا قمت باختبار كلتا الطريقتين ، فستبدو الطريقة 1 "أكثر سلاسة";وقد بنيت غفيس في الرسوم المتحركة الانتقالية عند تغيير البيانات.

نصائح أخرى

حسنا لقد وجدت الحل في هذا الجواب.

mtc <- reactive({ list(data=mtcars[1:input$n, ],
    labx = "Computed x axis label",
    laby = "Computed y axis label")
})

reactive({
    dl <- mtc()
    dl$data %>% ggvis(data=data,~wt,~mpg) %>% 
    layer_points() %>%
    add_axis("x",title=dl$labx) %>%
    add_axis("y",title=dl$laby) 
 }) %>% bind_shiny("plot", "plot_ui")

الحيلة هي أن الدعوة إلى رد الفعل يتم تقييمها وبالتالي يمكنك فصل عملية حساب البيانات ل غفيس و غفيس الفعلية التآمر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top