2

我运行了发布在http://ggplot2.tidyverse.org/articles/extending-ggplot2.html#picking-defaults的 R 代码 ,以下是修改后的代码,添加了一些 print() 以显示每个步骤中的变量值,我的问题在代码中被标记为注释:

StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x",
setup_params = function(data, params) {
  print("PARAMS BEFORE:")
  print(params)
  if(!is.null(params$bandwidth))
  return(params)

  print("DATA: ")
  print(data)
  #1. When and how does the data being modified and the "group" field added?
  xs <- split(data$x, data$group)
  print("XS: ")
  print(xs)
  bws <- vapply(xs, bw.nrd0, numeric(1))
  print("BWS: ")
  print(bws)
  bw <- mean(bws)
  print("BW: ")
  print(bw)
  message("Picking bandwidth of ", signif(bw, 3))

  params$bandwidth <- bw
  print("PARAMS AFTER: ")
  print(params)
  params
  },

  compute_group = function(data, scales, bandwidth = 1) {
  #2. how does the bandwidth computed in setup_params passed into compute_group
  #even if the bandwidth has already been set to 1 in the arguments?
  d <- density(data$x, bw = bandwidth)
  data.frame(x = d$x, y = d$y)
}
)

stat_density_common <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, bandwidth = NULL, ...){
  layer(stat = StatDensityCommon, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(bandwidth = bandwidth, na.rm = na.rm, ...))
}

ggplot(mpg, aes(displ, colour = drv)) + stat_density_common()

以下是除绘图外的输出:

[1] "PARAMS BEFORE:"
$bandwidth
NULL

$na.rm
[1] FALSE

[1] "DATA: "
      x colour PANEL group
1   1.8      f     1     2
2   1.8      f     1     2
3   2.0      f     1     2
4   2.0      f     1     2
5   2.8      f     1     2
6   2.8      f     1     2
7   3.1      f     1     2
8   1.8      4     1     1
9   1.8      4     1     1
10  2.0      4     1     1
11  2.0      4     1     1
12  2.8      4     1     1
13  2.8      4     1     1
14  3.1      4     1     1
15  3.1      4     1     1
16  2.8      4     1     1
17  3.1      4     1     1
18  4.2      4     1     1
19  5.3      r     1     3
20  5.3      r     1     3
21  5.3      r     1     3
22  5.7      r     1     3
23  6.0      r     1     3
24  5.7      r     1     3
25  5.7      r     1     3
26  6.2      r     1     3
27  6.2      r     1     3
28  7.0      r     1     3
29  5.3      4     1     1
30  5.3      4     1     1
31  5.7      4     1     1
32  6.5      4     1     1
33  2.4      f     1     2
34  2.4      f     1     2
35  3.1      f     1     2
36  3.5      f     1     2
37  3.6      f     1     2
38  2.4      f     1     2
39  3.0      f     1     2
40  3.3      f     1     2
41  3.3      f     1     2
42  3.3      f     1     2
43  3.3      f     1     2
44  3.3      f     1     2
45  3.8      f     1     2
46  3.8      f     1     2
47  3.8      f     1     2
48  4.0      f     1     2
49  3.7      4     1     1
50  3.7      4     1     1
51  3.9      4     1     1
52  3.9      4     1     1
53  4.7      4     1     1
54  4.7      4     1     1
55  4.7      4     1     1
56  5.2      4     1     1
57  5.2      4     1     1
58  3.9      4     1     1
59  4.7      4     1     1
60  4.7      4     1     1
61  4.7      4     1     1
62  5.2      4     1     1
63  5.7      4     1     1
64  5.9      4     1     1
65  4.7      4     1     1
66  4.7      4     1     1
67  4.7      4     1     1
68  4.7      4     1     1
69  4.7      4     1     1
70  4.7      4     1     1
71  5.2      4     1     1
72  5.2      4     1     1
73  5.7      4     1     1
74  5.9      4     1     1
75  4.6      r     1     3
76  5.4      r     1     3
77  5.4      r     1     3
78  4.0      4     1     1
79  4.0      4     1     1
80  4.0      4     1     1
81  4.0      4     1     1
82  4.6      4     1     1
83  5.0      4     1     1
84  4.2      4     1     1
85  4.2      4     1     1
86  4.6      4     1     1
87  4.6      4     1     1
88  4.6      4     1     1
89  5.4      4     1     1
90  5.4      4     1     1
91  3.8      r     1     3
92  3.8      r     1     3
93  4.0      r     1     3
94  4.0      r     1     3
95  4.6      r     1     3
96  4.6      r     1     3
97  4.6      r     1     3
98  4.6      r     1     3
99  5.4      r     1     3
100 1.6      f     1     2
101 1.6      f     1     2
102 1.6      f     1     2
103 1.6      f     1     2
104 1.6      f     1     2
105 1.8      f     1     2
106 1.8      f     1     2
107 1.8      f     1     2
108 2.0      f     1     2
109 2.4      f     1     2
110 2.4      f     1     2
111 2.4      f     1     2
112 2.4      f     1     2
113 2.5      f     1     2
114 2.5      f     1     2
115 3.3      f     1     2
116 2.0      f     1     2
117 2.0      f     1     2
118 2.0      f     1     2
119 2.0      f     1     2
120 2.7      f     1     2
121 2.7      f     1     2
122 2.7      f     1     2
123 3.0      4     1     1
124 3.7      4     1     1
125 4.0      4     1     1
126 4.7      4     1     1
127 4.7      4     1     1
128 4.7      4     1     1
129 5.7      4     1     1
130 6.1      4     1     1
131 4.0      4     1     1
132 4.2      4     1     1
133 4.4      4     1     1
134 4.6      4     1     1
135 5.4      r     1     3
136 5.4      r     1     3
137 5.4      r     1     3
138 4.0      4     1     1
139 4.0      4     1     1
140 4.6      4     1     1
141 5.0      4     1     1
142 2.4      f     1     2
143 2.4      f     1     2
144 2.5      f     1     2
145 2.5      f     1     2
146 3.5      f     1     2
147 3.5      f     1     2
148 3.0      f     1     2
149 3.0      f     1     2
150 3.5      f     1     2
151 3.3      4     1     1
152 3.3      4     1     1
153 4.0      4     1     1
154 5.6      4     1     1
155 3.1      f     1     2
156 3.8      f     1     2
157 3.8      f     1     2
158 3.8      f     1     2
159 5.3      f     1     2
160 2.5      4     1     1
161 2.5      4     1     1
162 2.5      4     1     1
163 2.5      4     1     1
164 2.5      4     1     1
165 2.5      4     1     1
166 2.2      4     1     1
167 2.2      4     1     1
168 2.5      4     1     1
169 2.5      4     1     1
170 2.5      4     1     1
171 2.5      4     1     1
172 2.5      4     1     1
173 2.5      4     1     1
174 2.7      4     1     1
175 2.7      4     1     1
176 3.4      4     1     1
177 3.4      4     1     1
178 4.0      4     1     1
179 4.7      4     1     1
180 2.2      f     1     2
181 2.2      f     1     2
182 2.4      f     1     2
183 2.4      f     1     2
184 3.0      f     1     2
185 3.0      f     1     2
186 3.5      f     1     2
187 2.2      f     1     2
188 2.2      f     1     2
189 2.4      f     1     2
190 2.4      f     1     2
191 3.0      f     1     2
192 3.0      f     1     2
193 3.3      f     1     2
194 1.8      f     1     2
195 1.8      f     1     2
196 1.8      f     1     2
197 1.8      f     1     2
198 1.8      f     1     2
199 4.7      4     1     1
200 5.7      4     1     1
201 2.7      4     1     1
202 2.7      4     1     1
203 2.7      4     1     1
204 3.4      4     1     1
205 3.4      4     1     1
206 4.0      4     1     1
207 4.0      4     1     1
208 2.0      f     1     2
209 2.0      f     1     2
210 2.0      f     1     2
211 2.0      f     1     2
212 2.8      f     1     2
213 1.9      f     1     2
214 2.0      f     1     2
215 2.0      f     1     2
216 2.0      f     1     2
217 2.0      f     1     2
218 2.5      f     1     2
219 2.5      f     1     2
220 2.8      f     1     2
221 2.8      f     1     2
222 1.9      f     1     2
223 1.9      f     1     2
224 2.0      f     1     2
225 2.0      f     1     2
226 2.5      f     1     2
227 2.5      f     1     2
228 1.8      f     1     2
229 1.8      f     1     2
230 2.0      f     1     2
231 2.0      f     1     2
232 2.8      f     1     2
233 2.8      f     1     2
234 3.6      f     1     2
[1] "XS: "
$`1`
  [1] 1.8 1.8 2.0 2.0 2.8 2.8 3.1 3.1 2.8 3.1 4.2 5.3 5.3 5.7 6.5 3.7 3.7 3.9 3.9 4.7 4.7 4.7 5.2 5.2
 [25] 3.9 4.7 4.7 4.7 5.2 5.7 5.9 4.7 4.7 4.7 4.7 4.7 4.7 5.2 5.2 5.7 5.9 4.0 4.0 4.0 4.0 4.6 5.0 4.2
 [49] 4.2 4.6 4.6 4.6 5.4 5.4 3.0 3.7 4.0 4.7 4.7 4.7 5.7 6.1 4.0 4.2 4.4 4.6 4.0 4.0 4.6 5.0 3.3 3.3
 [73] 4.0 5.6 2.5 2.5 2.5 2.5 2.5 2.5 2.2 2.2 2.5 2.5 2.5 2.5 2.5 2.5 2.7 2.7 3.4 3.4 4.0 4.7 4.7 5.7
 [97] 2.7 2.7 2.7 3.4 3.4 4.0 4.0

$`2`
  [1] 1.8 1.8 2.0 2.0 2.8 2.8 3.1 2.4 2.4 3.1 3.5 3.6 2.4 3.0 3.3 3.3 3.3 3.3 3.3 3.8 3.8 3.8 4.0 1.6
 [25] 1.6 1.6 1.6 1.6 1.8 1.8 1.8 2.0 2.4 2.4 2.4 2.4 2.5 2.5 3.3 2.0 2.0 2.0 2.0 2.7 2.7 2.7 2.4 2.4
 [49] 2.5 2.5 3.5 3.5 3.0 3.0 3.5 3.1 3.8 3.8 3.8 5.3 2.2 2.2 2.4 2.4 3.0 3.0 3.5 2.2 2.2 2.4 2.4 3.0
 [73] 3.0 3.3 1.8 1.8 1.8 1.8 1.8 2.0 2.0 2.0 2.0 2.8 1.9 2.0 2.0 2.0 2.0 2.5 2.5 2.8 2.8 1.9 1.9 2.0
 [97] 2.0 2.5 2.5 1.8 1.8 2.0 2.0 2.8 2.8 3.6

$`3`
 [1] 5.3 5.3 5.3 5.7 6.0 5.7 5.7 6.2 6.2 7.0 4.6 5.4 5.4 3.8 3.8 4.0 4.0 4.6 4.6 4.6 4.6 5.4 5.4 5.4
[25] 5.4

[1] "BWS: "
        1         2         3 
0.4056219 0.2482564 0.3797632 
[1] "BW: "
[1] 0.3445472
Picking bandwidth of 0.345
[1] "PARAMS AFTER: "
$bandwidth
[1] 0.3445472

$na.rm
[1] FALSE

提前致谢!

4

0 回答 0