मैं एक पैकेज इस वर्कफ़्लो का उपयोग करता है पर काम कर रहा है:
- आर सत्र में उपयोगकर्ता लोड डेटा और कमांड लाइन
- डेटा एक चमकदार एप्लिकेशन को पारित कर दिया है से कुछ प्रारंभिक जांच पूरा करता है जो उपयोगकर्ता को
- उपयोगकर्ता को इंटरैक्टिव रूप से चुनने और संशोधित करने की अनुमति देता है, उपयोगकर्ता चमकदार सत्र को समाप्त करने के लिए एक बटन पर क्लिक करता है, और संशोधित डेटा आर सत्र में वापस आ जाता है, उपयोगकर्ता द्वारा किए गए सभी परिवर्तनों के साथ।
यह हमेशा की तरह चमकदार प्रयोग किया जाता है नहीं है - एप्लिकेशन दूर से तैनात नहीं किया जा रहा है, लेकिन बजाय एक एकल उपयोगकर्ता के लिए एक इंटरैक्टिव अंकन इंटरफेस के रूप में सेवा करने के लिए स्थानीय स्तर पर किया जाता है। मैंने बेस ग्राफिक्स और locator()
फ़ंक्शन के साथ समान चीजें की हैं, जो थकाऊ है। टीसीएल/टीके का उपयोग करना आसान हो सकता है, लेकिन यह देखने के लिए उत्सुक था कि यह चमकदार के साथ कैसे काम कर सकता है।
यहाँ एक खिलौना उदाहरण है:
myShiny <- function(mydata){
ui <- fluidPage(
actionButton("exit", label = "Return to R"),
plotOutput("dataPlot", click = "pointPicker")
)
server <- function(input, output){
output$dataPlot <- renderPlot({
plot(x = myData()[, 1], y = myData()[,2], cex = myData()[,3])
})
myData <- reactive({
selPts <- nearPoints(mydata,
input$pointPicker, "x", "y",
threshold = 25, maxpoints = 1, allRows = TRUE)
if(sum(selPts[,"selected_"]) > 0){
## use '<<-' to modify mydata in the parent environment, not the
## local copy
mydata[which(selPts[, "selected_", ]), "size"] <<-
mydata[which(selPts[, "selected_", ]), "size"] + 1
}
mydata
})
observe({
if(input$exit > 0)
stopApp()
})
}
runApp(shinyApp(ui = ui, server = server))
return(mydata)
}
testDF <- data.frame(x = seq(0, 2 * pi, length = 13),
y = sin(seq(0, 2 * pi, length = 13)),
size = rep(1, 13))
modDF <- myShiny(testDF)
इस मामले में, एक बिंदु पर क्लिक (जो कल्पना है स्तंभों में से एक ("आकार") इसी पंक्ति में का मूल्य बढ़ जाता प्लॉट किए जाने पर cex
तर्क का उपयोग करना)। मूल्यों, इस मामले में उपयोगकर्ता के लिए वापस आ रहे हैं और, modDF
चर में संग्रहीत:
> modDF
x y size
1 0.0000000 0.000000e+00 1
2 0.5235988 5.000000e-01 5
3 1.0471976 8.660254e-01 1
4 1.5707963 1.000000e+00 1
5 2.0943951 8.660254e-01 2
6 2.6179939 5.000000e-01 1
7 3.1415927 1.224647e-16 1
8 3.6651914 -5.000000e-01 7
9 4.1887902 -8.660254e-01 1
10 4.7123890 -1.000000e+00 1
11 5.2359878 -8.660254e-01 3
12 5.7595865 -5.000000e-01 1
13 6.2831853 -2.449294e-16 1
यह इस संशोधित करने के लिए (एक 'बाहरी' स्तंभ में मान टॉगल करने के लिए इतना है कि आप रिवर्स सकता है आसान होगा आपके निर्णय), या सीधे डेटा फ्रेम में स्थायी परिवर्तन करने के लिए।
मेरे वास्तविक पैकेज में, मैं इस दृष्टिकोण का उपयोग करता हूं ताकि उपयोगकर्ता गैर-रैखिक प्रतिगमन के लिए प्रारंभिक पैरामीटर का चयन कर सके, तुरंत ब्राउज़र में प्लॉट किए गए परिणामी मॉडल फिट को देखें, तब तक दोहराएं जब तक उन्हें समझदार दिखने वाला एक उपयुक्त मॉडल न मिल जाए , और अंत में परिणाम बचाएं और अपने आर सत्र में वापस आएं।
मुझे लगता है कि कठिनाई एक संपादन योग्य डेटा तालिका है, मुझे मौजूदा नहीं पता है। हमारे पास ऐसी प्रदर्शित और संपादन योग्य डेटा तालिका होने पर जानकारी सर्वर पर वापस जा सकती है। – Zhenglei