在JavaScript中检索R对象属性

在JavaScript中检索R对象属性,javascript,r,plotly,htmlwidgets,onrender,Javascript,R,Plotly,Htmlwidgets,Onrender,我有一个包含100个观测值的双变量数据集。我用了六边形箱子,结果有26个六边形箱子。为了保存26个六边形箱中每个箱中的100个观察值行,我在R中使用了base::attr函数。在下面的代码中,这是在: attr(hexdf, "cID") <- h@cID 当我运行此代码并在Web浏览器中打开它时,我会得到一个如下所示的交互式绘图(绿色框不在绘图中;出于解释目的,它是叠加的): 如果单击绿色框内的六边形,控制台将打印正确的六边形40和计数3。在这一点上,我想获得原始数据框的3行,它们被

我有一个包含100个观测值的双变量数据集。我用了六边形箱子,结果有26个六边形箱子。为了保存26个六边形箱中每个箱中的100个观察值行,我在R中使用了
base::attr
函数。在下面的代码中,这是在:

attr(hexdf, "cID") <- h@cID
当我运行此代码并在Web浏览器中打开它时,我会得到一个如下所示的交互式绘图(绿色框不在绘图中;出于解释目的,它是叠加的):

如果单击绿色框内的六边形,控制台将打印正确的
六边形
40和
计数
3。在这一点上,我想获得原始数据框的3行,它们被放在那个六边形容器中

我知道如何使用
base::attr
函数在
htmlwidgets
包的
onRender()函数之外的R中执行此操作。例如,我可以执行以下操作:

hexID=40
obsns <- which(attr(pS$data, "cID")==hexID)
dat <- bindata[obsns,]
我正在处理比这个MWE更大的数据集。出于这个原因,我打算使用
base:attr
函数来防止更大的数据帧四处浮动。但是,我不确定如何转换
base::attr
函数的功能,以便访问
onRender()
JavaScript代码中单击的六边形容器中出现的适当数据点行。我确实在
onRender()
JavaScript代码中包含了
pS$data
对象,但我仍然被卡住了


任何建议都将不胜感激

您可以在bindata中为每一行添加一列,该列的ID为它所属的hexbin:

bindata$hex <- h@cID

谢谢你的帮助!我意识到我缺乏远见,并且过度简化了我的MWE,因此有了一个不需要使用base::attr()的解决方案(如您所示)。这个解决方案仍然对我和其他人有帮助。我刚刚写了一个更好的MWE,我希望它能更清楚地说明为什么我仍然坚持使用base::attr()以及为什么我认为这里的解决方案不适合这种情况。我在第2部分的版本()中发布了这一点。谢谢。我认为同样的策略也适用于第2部分,我已经发布了一个解决方案,希望能对您的完整示例起作用。
     ID         A        B
47 ID47 0.3645820 2.087167
66 ID66 0.1887923 2.206102
71 ID71 0.4755095 2.307978
bindata$hex <- h@cID
ggPS %>% onRender("
                  function(el, x, 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]

                  var selected_rows = [];

                  data.forEach(function(row){
                    if(row.hex==hexID) selected_rows.push(row);
                  });
                  console.log(selected_rows);

                  })}
                  ", data = bindata)