में आर ऑब्जेक्ट विशेषताओं को पुनर्प्राप्त करना मेरे पास 100 अवलोकनों के साथ एक बिवाएरेट डेटासेट है। मैंने षट्भुज का उपयोग किया और 26 हेक्सागोन डिब्बे के साथ समाप्त हो गया। आदेश है कि 26 षट्भुज डिब्बे में से प्रत्येक में हैं 100 टिप्पणियों की पंक्तियों बचाने के लिए, मैं आर में base::attr
समारोह इस्तेमाल किया नीचे कोड में, इस पर किया जाता है:जावास्क्रिप्ट
attr(hexdf, "cID") <- [email protected]
मैं बनाने के लिए कोशिश कर रहा हूँ हेक्सागोन बिनिंग के एक इंटरैक्टिव आर Plotly
ऑब्जेक्ट ताकि अगर कोई उपयोगकर्ता दिए गए हेक्सागोन बिन पर क्लिक करना था, तो वे उस बिन में समूहीकृत 100 अवलोकनों की पंक्तियां प्राप्त करेंगे। मेरे पास इस लक्ष्य का हिस्सा पूरा हुआ है। मेरे मेगावाट के नीचे है:
library(plotly)
library(data.table)
library(GGally)
library(hexbin)
library(htmlwidgets)
set.seed(1)
bindata <- data.frame(ID = paste0("ID",1:100), A=rnorm(100), B=rnorm(100))
bindata$ID <- as.character(bindata$ID)
x = bindata[,c("A")]
y = bindata[,c("B")]
h <- hexbin(x=x, y=y, xbins=5, shape=1, IDs=TRUE)
hexdf <- data.frame (hcell2xy (h), hexID = [email protected], counts = [email protected])
attr(hexdf, "cID") <- [email protected]
pS <- ggplot(hexdf, aes(x=x, y=y, fill = counts, hexID=hexID)) + geom_hex(stat="identity")
ggPS <- ggplotly(pS)
myLength <- length(ggPS[["x"]][["data"]])
for (i in 1:myLength){
item =ggPS[["x"]][["data"]][[i]]$text[1]
if (!is.null(item))
if (!startsWith(item, "co")){
ggPS[["x"]][["data"]][[i]]$hoverinfo <- "none"
}
}
ggPS %>% onRender("
function(el, x, data) {
//console.log(el)
//console.log(x)
//console.log(data)
myGraph = document.getElementById(el.id);
el.on('plotly_click', function(e) {
cN = e.points[0].curveNumber
split1 = (x.data[cN].text).split(' ')
hexID = (x.data[cN].text).split(' ')[2]
counts = split1[1].split('<')[0]
console.log(hexID)
console.log(counts)
})}
", data = pS$data)
मुझे इस कोड चलाने के लिए और वेब ब्राउज़र में खोलने, मैं नीचे की तरह एक इंटरैक्टिव भूखंड प्राप्त (हरे बॉक्स साजिश में नहीं है, यह स्पष्ट उद्देश्यों के लिए आरोपित है):
अगर मैं हरे बॉक्स के अंदर षट्भुज पर क्लिक करें, 40 की सही hexID
और 3 के counts
कंसोल के लिए मुद्रित कर रहे हैं। इस बिंदु पर, मैं उस मूल डेटा फ्रेम की 3 पंक्तियां प्राप्त करना चाहता हूं जिन्हें हेक्सागोन बिन में रखा गया था।
मुझे पता है कि onRender()
htmlwidgets
पैकेज के base::attr
फ़ंक्शन का उपयोग करके R में यह कैसे करें।
hexID=40
obsns <- which(attr(pS$data, "cID")==hexID)
dat <- bindata[obsns,]
और निम्नलिखित सही 3 डेटा बिंदुओं कि बिन मैं पर क्लिक किया में डाल दिया गया प्राप्त करते हैं:: उदाहरण के लिए, मैं निम्न कर सकते हैं
ID A B
47 ID47 0.3645820 2.087167
66 ID66 0.1887923 2.206102
71 ID71 0.4755095 2.307978
मैं तुलना में अधिक बड़े डेटासेट के साथ काम कर रहा हूँ यह MWE। इसी कारण से, base:attr
फ़ंक्शन का उपयोग करने का मेरा इरादा कभी भी बड़े डेटा फ्रेम को फ़्लोट करने से रोकना था। हालांकि, मुझे यकीन है कि base::attr
फ़ंक्शन की कार्यक्षमता का अनुवाद कैसे करें ताकि मैं onRender()
जावास्क्रिप्ट कोड में क्लिक किए गए हेक्सागोन बिन में होने वाली उपयुक्त डेटा पॉइंट पंक्तियों तक पहुंच सकूं। मैंने pS$data
ऑब्जेक्ट को onRender()
जावास्क्रिप्ट कोड में शामिल किया था, लेकिन अभी भी अटक गया हूं।
किसी भी सलाह की ईमानदारी से सराहना की जाएगी!
सहायता के लिए धन्यवाद! मुझे एहसास है कि मुझे दूरदर्शिता की कमी है और मेरे एमडब्ल्यूई को ओवरम्प्लिफाइड किया गया है ताकि एक समाधान (जैसा कि आपने दिखाया) है जिसके लिए आधार :: attr() का उपयोग करने की आवश्यकता नहीं है। समाधान अभी भी मेरे और दूसरों के लिए सहायक हो सकता है। मैंने अभी एक बेहतर MWE लिखा है जो मुझे आशा है कि मैं स्पष्ट रूप से आधार :: attr() के साथ क्यों अटक गया हूं और मुझे नहीं लगता कि यहां समाधान उस मामले के लिए क्यों काम करेगा। मैंने इसे एक भाग 2 संस्करण में पोस्ट किया है (http://stackoverflow.com/questions/42460061/retrieving-r-object-attributes-in-javascript-part-2)। धन्यवाद। – luckButtered
मेरे पास एक ही रणनीति भाग 2 के लिए काम करेगी, मैंने एक समाधान पोस्ट किया है जो उम्मीद है कि आपके पूर्ण उदाहरण पर काम करेगा। – NicE