我可以访问“的结果”吗;设置“U数据”;从「;映射“U数据”吗;?(适用于ggplot2 ggproto中的“计算”布局,但不适用于“地图”数据) 我可以从ggpplot2 ggproto中的“地图数据”访问“设置数据”的结果吗? (适用于“计算布局”,但不适用于“地图数据”)
大家好。 我正在开发一个ggplot2扩展,它将实现一种新的刻面方法 我不想深入了解算法的本质,但我只想说,我需要首先为输入数据的每一行计算一些新列,然后才能执行我可以访问“的结果”吗;设置“U数据”;从「;映射“U数据”吗;?(适用于ggplot2 ggproto中的“计算”布局,但不适用于“地图”数据) 我可以从ggpplot2 ggproto中的“地图数据”访问“设置数据”的结果吗? (适用于“计算布局”,但不适用于“地图数据”),r,ggplot2,facet-wrap,ggproto,R,Ggplot2,Facet Wrap,Ggproto,大家好。 我正在开发一个ggplot2扩展,它将实现一种新的刻面方法 我不想深入了解算法的本质,但我只想说,我需要首先为输入数据的每一行计算一些新列,然后才能执行compute\u layout和map\u data 当然,一种选择是计算我的新列两次,一次在compute\u layout内,一次在map\u data内,但这将是计算成本的两倍,只是不够优雅 似乎setup_参数和setup_数据就是针对这个确切的用例 什么不起作用❌ 我正在基于此创建一个可复制的小示例 我刚刚做了一个小修改,尝
compute\u layout
和map\u data
当然,一种选择是计算我的新列两次,一次在compute\u layout
内,一次在map\u data
内,但这将是计算成本的两倍,只是不够优雅
似乎setup_参数
和setup_数据
就是针对这个确切的用例
什么不起作用❌
我正在基于此创建一个可复制的小示例
我刚刚做了一个小修改,尝试使用setup\u data
函数向数据添加hello
列
库(ggplot2)
小关节自举TL;DR:在setup\u data
功能中的data
的每个列表元素中设置一个新列
似乎setup_参数和setup_数据就是针对这个用例的
没错,但我从你的问题中得到的印象是,数据摄取的操作顺序存在一些混乱。面和坐标是绘图“布局”的一部分。在设置布局之前,图层会设置其数据(有时会复制全局数据)。然后,布局可以检查数据并进行调整(通常附加一个面板列)。如果我们检查/打印到控制台ggplot2:::Layout$setup
,我们会看到以下内容(我的评论):
函数(…)
f(…,self=self)
函数(self、data、plot\u data=new\u data\u frame()、plot\u env=emptyenv())
{
数据这太棒了,谢谢!你是对的,我误解了数据
传递的基本管道。因此,感谢你不仅回答了我的问题,而且帮助我理解了它!
[1] "In SETUP_DATA:"
[1] " names(data):"
[1] "carat" "cut" "color" "clarity" "depth" "table"
[7] "price" "x" "y" "z" "hello"
[1] ""
[1] "In COMPUTE_LAYOUT:"
[1] " names(data):"
[1] "carat" "cut" "color" "clarity" "depth" "table"
[7] "price" "x" "y" "z" "hello"
[1] ""
[1] "In MAP_DATA:"
[1] " names(data):"
[1] "carat" "cut" "color" "clarity" "depth" "table"
[7] "price" "x" "y" "z"
[1] ""
[1] "In SETUP_DATA:"
[1] " params$hello:"
[1] "world"
[1] ""
[1] "In COMPUTE_LAYOUT:"
[1] " params$hello:"
[1] "world"
[1] ""
[1] "In MAP_DATA:"
[1] " params$hello:"
[1] "world"
[1] ""
FacetBootstrap <- ggproto(
"FacetBootstrap", FacetWrap,
setup_data = function(data, params){
data <- lapply(data, cbind, hello = "world")
print("In SETUP_DATA:")
print(" names(data):")
print(names(data[[1]]))
print("")
data
},
...other code...
)