我可以访问“的结果”吗;设置“U数据”;从「;映射“U数据”吗;?(适用于ggplot2 ggproto中的“计算”布局,但不适用于“地图”数据) 我可以从ggpplot2 ggproto中的“地图数据”访问“设置数据”的结果吗? (适用于“计算布局”,但不适用于“地图数据”)

我可以访问“的结果”吗;设置“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_数据就是针对这个确切的用例 什么不起作用❌ 我正在基于此创建一个可复制的小示例 我刚刚做了一个小修改,尝

大家好。 我正在开发一个ggplot2扩展,它将实现一种新的刻面方法

我不想深入了解算法的本质,但我只想说,我需要首先为输入数据的每一行计算一些新列,然后才能执行
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...
)