r - dplyr::select 自制函数中未找到对象

标签 r function ggplot2 dplyr

我正在尝试学习如何使用函数来使我的代码更易于阅读和内存。我正在练习一个函数,该函数预计使用 filter() (根据函数参数之一)对我的数据进行子集化,仅保留我使用 select() 提供给函数的部分数据列,并绘制索引随时间变化的趋势与 ggplot() + geom_line()

我发现了几个相关的问题,但我无法解决其中任何一个问题。我认为我的问题与我在函数本身中包含参数的方式有关。由于我对用 R 编写函数(以及在某种程度上,对 R 本身)还很陌生,所以我想了解我缺少什么。

下面是我使用 dput() 获得的数据示例:

structure(list(denominazione_regione = c("Abruzzo", "Abruzzo", 
"Abruzzo", "Abruzzo", "Abruzzo", "Abruzzo", "Abruzzo", "Abruzzo", 
"Abruzzo", "Abruzzo", "Basilicata", "Basilicata", "Basilicata", 
"Basilicata", "Basilicata", "Basilicata", "Basilicata", "Basilicata", 
"Basilicata", "Basilicata", "Calabria", "Calabria", "Calabria", 
"Calabria", "Calabria", "Calabria", "Calabria", "Calabria", "Calabria", 
"Calabria", "Campania", "Campania", "Campania", "Campania", "Campania", 
"Campania", "Campania", "Campania", "Campania", "Campania", "Emilia-Romagna", 
"Emilia-Romagna", "Emilia-Romagna", "Emilia-Romagna", "Emilia-Romagna", 
"Emilia-Romagna", "Emilia-Romagna", "Emilia-Romagna", "Emilia-Romagna", 
"Emilia-Romagna", "Friuli Venezia Giulia", "Friuli Venezia Giulia", 
"Friuli Venezia Giulia", "Friuli Venezia Giulia", "Friuli Venezia Giulia", 
"Friuli Venezia Giulia", "Friuli Venezia Giulia", "Friuli Venezia Giulia", 
"Friuli Venezia Giulia", "Friuli Venezia Giulia", "Lazio", "Lazio", 
"Lazio", "Lazio", "Lazio", "Lazio", "Lazio", "Lazio", "Lazio", 
"Lazio", "Liguria", "Liguria", "Liguria", "Liguria", "Liguria", 
"Liguria", "Liguria", "Liguria", "Liguria", "Liguria", "Lombardia", 
"Lombardia", "Lombardia", "Lombardia", "Lombardia", "Lombardia", 
"Lombardia", "Lombardia", "Lombardia", "Lombardia", "Marche", 
"Marche", "Marche", "Marche", "Marche", "Marche", "Marche", "Marche", 
"Marche", "Marche", "Molise", "Molise", "Molise", "Molise", "Molise", 
"Molise", "Molise", "Molise", "Molise", "Molise", "P.A. Bolzano", 
"P.A. Bolzano", "P.A. Bolzano", "P.A. Bolzano", "P.A. Bolzano", 
"P.A. Bolzano", "P.A. Bolzano", "P.A. Bolzano", "P.A. Bolzano", 
"P.A. Bolzano", "P.A. Trento", "P.A. Trento", "P.A. Trento", 
"P.A. Trento", "P.A. Trento", "P.A. Trento", "P.A. Trento", "P.A. Trento", 
"P.A. Trento", "P.A. Trento", "Piemonte", "Piemonte", "Piemonte", 
"Piemonte", "Piemonte", "Piemonte", "Piemonte", "Piemonte", "Piemonte", 
"Piemonte", "Puglia", "Puglia", "Puglia", "Puglia", "Puglia", 
"Puglia", "Puglia", "Puglia", "Puglia", "Puglia", "Sardegna", 
"Sardegna", "Sardegna", "Sardegna", "Sardegna", "Sardegna", "Sardegna", 
"Sardegna", "Sardegna", "Sardegna", "Sicilia", "Sicilia", "Sicilia", 
"Sicilia", "Sicilia", "Sicilia", "Sicilia", "Sicilia", "Sicilia", 
"Sicilia", "Toscana", "Toscana", "Toscana", "Toscana", "Toscana", 
"Toscana", "Toscana", "Toscana", "Toscana", "Toscana", "Umbria", 
"Umbria", "Umbria", "Umbria", "Umbria", "Umbria", "Umbria", "Umbria", 
"Umbria", "Umbria", "Valle d'Aosta", "Valle d'Aosta", "Valle d'Aosta", 
"Valle d'Aosta", "Valle d'Aosta", "Valle d'Aosta", "Valle d'Aosta", 
"Valle d'Aosta", "Valle d'Aosta", "Valle d'Aosta", "Veneto", 
"Veneto", "Veneto", "Veneto", "Veneto", "Veneto", "Veneto", "Veneto", 
"Veneto", "Veneto"), mese = c(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 4, 
4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 
4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 
5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5), giorno = c(13, 14, 15, 17, 18, 
19, 20, 21, 22, 24, 2, 3, 5, 7, 8, 9, 10, 11, 12, 15, 3, 4, 5, 
6, 7, 8, 9, 10, 11, 12, 4, 5, 6, 7, 8, 9, 10, 14, 15, 16, 14, 
15, 16, 17, 18, 19, 20, 21, 22, 23, 8, 9, 10, 11, 12, 13, 14, 
15, 16, 17, 22, 23, 24, 25, 26, 27, 28, 29, 4, 6, 4, 9, 10, 11, 
12, 13, 14, 15, 16, 17, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 
30, 31, 1, 2, 3, 4, 5, 6, 7, 8, 27, 1, 2, 3, 5, 6, 7, 19, 16, 
17, 3, 4, 7, 8, 9, 10, 11, 5, 6, 17, 6, 9, 10, 11, 12, 13, 14, 
15, 16, 17, 20, 22, 23, 25, 27, 29, 30, 2, 3, 17, 3, 4, 5, 15, 
16, 17, 20, 21, 22, 23, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 6, 9, 10, 11, 12, 13, 14, 15, 
16, 17, 23, 24, 25, 26, 27, 28, 29, 31, 1, 2, 7, 8, 9, 10, 29, 
30, 1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17), indice_covid = c(0.000722977172570487, 
0.000731747419143323, 0.000726619405602403, 0.000705958713917565, 
0.000715143109836991, 0.000715066255966087, 0.000719508897665411, 
0.000712522957044176, 0.000708704722548377, 0.000704215366199546, 
0.000194231162135417, 0.000204103477007972, 0.000195833844109375, 
0.000196535072992117, 0.000195721206888281, 0.000204300911935104, 
0.000204788965105557, 0.000204686490106934, 0.000202443676947922, 
0.00019709033540664, 0.000191329551016342, 0.00019013015559816, 
0.000195445031690215, 0.000195653677128041, 0.000196745165065935, 
0.00019636132340351, 0.000194665566928984, 0.000198970510972297, 
0.000198872792842392, 0.000192711132430227, 0.000247190709193111, 
0.000253340604775297, 0.000257958192196345, 0.00026256767163786, 
0.000259478621064338, 0.000251187148507711, 0.000250203862942052, 
0.000245759340550998, 0.000251713424290707, 0.000250221080333117, 
0.00230641037054345, 0.0023030137614792, 0.00230321555195822, 
0.00230574274068461, 0.0022955317181813, 0.0022916164249754, 
0.00230260915349491, 0.00229883442609974, 0.00229607273678057, 
0.00229384641965863, 0.00102605677984233, 0.00103412261154359, 
0.00103905893583055, 0.00104611267918566, 0.00105462027451819, 
0.00106128028669706, 0.00112457383848192, 0.0010657720577344, 
0.00108146179292638, 0.00109006764207304, 0.000451787709373674, 
0.000451301708327933, 0.000453740362866175, 0.000458679513230127, 
0.000452522184585961, 0.000450469304561494, 0.000452388493645777, 
0.000451646379485777, 0.00044759030746637, 0.000453176465305298, 
0.00223742214827426, 0.00224570252927823, 0.00224596373110458, 
0.00226551056338028, 0.00225429956663055, 0.00226734839808079, 
0.00227926554196977, 0.00227752561522984, 0.0022828723494815, 
0.00229510317675282, 0.00419441077616446, 0.0042509108406737, 
0.00429653658926419, 0.00424793326504034, 0.00419551867716494, 
0.00422845831162317, 0.0042308249300686, 0.00420821551831933, 
0.00421728969042919, 0.0041844763767952, 0.00172290368072297, 
0.00178077393459916, 0.00184618380602529, 0.00188901900711415, 
0.0020071335192238, 0.00180186353769265, 0.00183252911777645, 
0.00184365144948012, 0.0018222985489136, 0.00169241476432713, 
0.000250794294819987, 0.000266834076638407, 0.000265165223138765, 
0.000269318035318716, 0.000276757902865351, 0.000272940706832408, 
0.000274233141481004, 0.000254959475421852, 0.000256973597672904, 
0.000265933897656217, 0.00160390744722108, 0.00161006319915358, 
0.00178213145122727, 0.00166885475302064, 0.0016547681756398, 
0.00161459333782649, 0.00160615142193389, 0.00160337890499983, 
0.00161225818840389, 0.00160400366732056, 0.00258365467992859, 
0.00257701229721788, 0.00259178457506773, 0.00262120887528692, 
0.00263828178998998, 0.00266783466211296, 0.00267901572358427, 
0.00269823185448847, 0.00270825410554096, 0.00272187052992249, 
0.00195370953028712, 0.00196262152333827, 0.00194005431082411, 
0.00194421363849008, 0.00194744414088127, 0.00194429612391499, 
0.00196104010507744, 0.00195441352344111, 0.00194683393834275, 
0.00195880684904024, 0.000330009885697706, 0.00034406841508414, 
0.000337786303630158, 0.000324351196174386, 0.000324488151434096, 
0.000324569103459299, 0.000328843946704101, 0.000337401985032215, 
0.000336483436678545, 0.000329547072227643, 0.000230483882870789, 
0.000230103422133935, 0.000230301910659427, 0.000231314894995154, 
0.000228620918265592, 0.000229279094603471, 0.000234826014536552, 
0.000234719487969866, 0.00023808566892597, 0.000239411792331136, 
0.000223062270757503, 0.000226287613069965, 0.00023061526741283, 
0.000230070197530306, 0.000226959363714129, 0.000226174506604244, 
0.000226413235808541, 0.000223216642122798, 0.000224058198468727, 
0.000224589546052104, 0.000705847037288575, 0.000697185576306138, 
0.000727218324766378, 0.000710302680606525, 0.000713471918610933, 
0.000718929784394798, 0.000733704525448964, 0.000725081910028338, 
0.000726996512532976, 0.000697427167923133, 0.000471752986060328, 
0.000496763433728451, 0.000528989540994201, 0.000549981803030561, 
0.00048950494039217, 0.000527332301604848, 0.000487397674642721, 
0.000460909394964938, 0.000460726234814601, 0.000463354614150553, 
0.00313132661181226, 0.00325238521159263, 0.00321473031687171, 
0.00328710836662263, 0.0031429102541658, 0.00315969283656677, 
0.00312271481546321, 0.00310642552480385, 0.00313066183374978, 
0.00314310505626025, 0.00119011081454931, 0.00120503266098013, 
0.00121702131779706, 0.00123403843449071, 0.0011908796837411, 
0.00120040745199511, 0.0012181362510992, 0.00123036198182824, 
0.00124443699302914, 0.00125054297376155), indice_covid_mobile = c(103.912846159121, 
101.213073787884, 99.2992098903576, 100.491596517356, 101.300982017554, 
99.9892533578459, 100.621290917066, 99.0290682097327, 99.4641247053094, 
100.26158538902, 115.9226525617, 105.082765692187, 103.08766970886, 
101.462864409105, 99.5858926900704, 104.383635878416, 100.238889374419, 
99.9499606833941, 98.9042690810515, 102.34133298302, 107.567889175972, 
99.3731258910028, 102.795388283008, 100.106754024915, 100.557867326552, 
99.8049041447617, 99.1364101417053, 102.211456351129, 99.9508881344138, 
96.901707707676, 103.716272968089, 102.487915343687, 101.822679560248, 
101.786909499663, 98.8235221212675, 96.8045642748461, 99.6085446363396, 
101.58668799582, 102.42272937678, 99.4071257972055, 101.154089070817, 
99.8527317988322, 100.008762017943, 100.109724368796, 99.5571482315378, 
99.8294385054715, 100.479693215658, 99.8360673851472, 99.8798656707148, 
99.9030380402904, 100.114688083845, 100.78609993713, 100.477344198053, 
100.678858831956, 100.81325802677, 100.631508073549, 105.96388650371, 
94.7711943195391, 101.472147358163, 100.795760812166, 100.991174693634, 
99.8924271210442, 100.540360138958, 101.088541105921, 98.6575967605781, 
99.5463470975805, 100.426042144237, 99.835956446633, 100.8372802469, 
101.781618493555, 100.393749520538, 100.492053705944, 100.011631185473, 
100.870309346718, 99.5051448035183, 100.578841944673, 100.52559826708, 
99.9236628331413, 100.234760663762, 100.535764834775, 101.600857776282, 
101.347032217977, 101.07331699724, 98.868778998757, 98.7661155530205, 
101.614006396929, 100.055968825303, 99.4656027577841, 100.215629928419, 
99.2219336103835, 103.98400560808, 103.358879229506, 103.673114826945, 
102.320202406123, 106.252690505751, 89.7729782515648, 101.701881382375, 
100.606938880031, 98.8418146731291, 92.8725298791513, 106.587311983887, 
108.53430496759, 99.3745725730888, 101.566122484236, 111.232519873583, 
98.6207454264458, 100.473522129988, 102.906353573357, 103.411157299569, 
103.486856262455, 104.116548061971, 100.383797203708, 118.44082353111, 
93.6437518046932, 99.1559135176178, 97.5721772750567, 99.4771490941511, 
100.519560604868, 100.553785719418, 100.807425857845, 100.463909136803, 
100.006603916455, 100.573232726355, 101.13529112343, 100.651337436861, 
101.120156013475, 100.419106237358, 100.717283244553, 100.371437726369, 
100.502774992704, 102.942338632398, 101.58152104801, 98.850149545095, 
100.736612990071, 100.625871301234, 100.528946833558, 100.861184721633, 
100.893960560723, 99.6121810964031, 101.284060427294, 106.306911726141, 
104.260032803778, 98.1741679333031, 100.882266971771, 100.042224373249, 
100.024947605897, 102.379257946514, 102.602461871014, 99.7277584618886, 
97.9385718003325, 101.294692780857, 99.8349295698616, 100.086260570856, 
100.439850599948, 98.8353639182557, 100.287889814665, 102.419287263269, 
99.9546359602037, 101.434129302692, 100.556994216052, 105.32505410048, 
101.445938078864, 101.912457462498, 99.763645361108, 98.6478762353532, 
99.6541860635133, 100.105550889833, 98.5881595330206, 101.035932860823, 
100.237147128295, 103.205110035867, 100.125355196867, 104.307712247772, 
97.6739249295887, 100.446181338032, 100.764972753867, 102.055102094094, 
98.8247836667833, 100.264053271521, 95.9326703636007, 112.11597059997, 
105.301598168353, 106.487214049528, 103.968369960001, 89.0038429807777, 
107.727677106256, 92.4270470743795, 101.052848336138, 99.9602611375818, 
100.57048614499, 103.394635772503, 103.866048317148, 98.8422375496386, 
102.251450125414, 102.180770080942, 100.533982234419, 98.829695700936, 
99.4783612458395, 100.780199259645, 100.397463002114, 100.329554145308, 
101.253819917305, 100.994882313579, 101.398259541127, 101.362276408612, 
100.800061365064, 101.476898454323, 101.003642303397, 101.143973189093, 
100.490662103956), indice_covid_fisso = c(8966.958396573, 9075.73421845227, 
9012.13237067192, 8755.88145458328, 8869.79389778578, 8868.84069277578, 
8923.94199444909, 8837.29660467997, 8789.93971545696, 8734.25902022251, 
14274.0922562703, 14999.6109203431, 14391.8737188443, 14443.4071888342, 
14383.5959838623, 15014.1204580173, 15049.9875964539, 15042.4566855114, 
14877.6318366388, 14484.2135498949, 16593.1915765469, 16489.1731546972, 
16950.1095690285, 16968.204493221, 17062.8645619911, 17029.5756204458, 
16882.509932477, 17255.8592706088, 17247.384596198, 16713.0102086266, 
7839.21256089349, 8034.24553302023, 8180.68408417076, 8326.8655052082, 
8228.90177454762, 7965.9525074559, 7934.76935909882, 7793.81925677153, 
7982.64240547845, 7935.31537795503, 1227.93003521849, 1226.12168474402, 
1226.22911774605, 1227.57458990548, 1222.13825412489, 1220.05375685345, 
1225.90627195246, 1223.8966117452, 1222.42629175954, 1221.24100327104, 
8859.45292261082, 8929.0970764655, 8971.71960329855, 9032.62491420386, 
9106.08346134662, 9163.58911358911, 9710.0951679899, 9202.37316026789, 
9337.84565363512, 9412.15257004731, 3476.06853467991, 3472.32922768268, 
3491.09231072248, 3529.09428557033, 3481.71960955858, 3465.92468749571, 
3480.69098735194, 3474.98113817457, 3443.77359527659, 3486.75366554139, 
6238.09607545619, 6261.18238140163, 6261.91063113719, 6316.40862464312, 
6285.15154833305, 6321.53264178107, 6354.75850779916, 6349.90746519359, 
6364.81455010715, 6398.91498826526, 1323.27161169467, 1341.09650663555, 
1355.49072339066, 1340.15712765777, 1323.62113729451, 1334.01308159951, 
1334.75971305066, 1327.62679395391, 1330.48955465938, 1320.13746261722, 
1414.1362338993, 1461.63536213666, 1515.32290733917, 1550.48146589578, 
1647.42827330727, 1478.94542550627, 1504.11532235845, 1513.24438305035, 
1495.71820864616, 1389.11134023281, 771.75264686781, 821.110803449613, 
815.975351279508, 828.75452472172, 851.648735595149, 839.902331458836, 
843.879454868576, 784.569880834311, 790.767805629534, 818.340742381602, 
7780.1187710493, 7809.97864933774, 8644.63493837713, 8095.16048611568, 
8026.83033072523, 7831.95311986324, 7791.00368203037, 7777.55495649506, 
7820.62594516405, 7780.58550858044, 11646.7962800509, 11616.85323896, 
11683.4448434984, 11816.0859557175, 11893.0485471188, 12026.2692456048, 
12076.6720901345, 12163.2960355366, 12208.4751057826, 12269.856265605, 
3745.51871273691, 3762.60417821855, 3719.33985695903, 3727.31383638831, 
3733.50713532563, 3727.47197182132, 3759.57239094578, 3746.86836041536, 
3732.33729662078, 3755.29094472873, 7279.55022764552, 7589.66145531074, 
7451.08698270595, 7154.72755901373, 7157.74859788319, 7159.53428479451, 
7253.83126638358, 7442.60945927894, 7422.34758481137, 7269.34121862073, 
14716.6217521341, 14692.328961306, 14705.0026481401, 14769.6826905103, 
14597.6696367375, 14639.6948408, 14993.871113465, 14987.0692878061, 
15202.0032400773, 15286.6775188485, 13562.5240475235, 13758.6297471818, 
14021.7576885192, 13988.6166137682, 13799.4732041881, 13751.7527026863, 
13766.2678000316, 13571.910060438, 13623.0779614024, 13655.3846995732, 
3709.28719515099, 3663.770468982, 3821.5951582046, 3732.70198593756, 
3749.35660560317, 3778.03816208134, 3855.68070346596, 3810.36811408214, 
3820.42951574437, 3665.04005381276, 3335.56624585953, 3512.40456485421, 
3740.2617672617, 3888.6891916591, 3461.08282215474, 3728.54412703095, 
3446.18323547991, 3258.89579011162, 3257.60074199724, 3276.18490288943, 
32348.8642996309, 33599.4870235032, 33210.484779231, 33958.2022804436, 
32468.5316869857, 32641.9078779708, 32259.8982267784, 32091.6180955748, 
32341.9966623645, 32470.5441332424, 1721.88218494195, 1743.47148672928, 
1760.81697619303, 1785.43776756444, 1722.99460417864, 1736.77961832881, 
1762.4300896669, 1780.11858361459, 1800.48266294519, 1809.31694906057
)), row.names = c(NA, -210L), class = c("grouped_df", "tbl_df", 
"tbl", "data.frame"), groups = structure(list(denominazione_regione = c("Abruzzo", 
"Basilicata", "Calabria", "Campania", "Emilia-Romagna", "Friuli Venezia Giulia", 
"Lazio", "Liguria", "Lombardia", "Marche", "Molise", "P.A. Bolzano", 
"P.A. Trento", "Piemonte", "Puglia", "Sardegna", "Sicilia", "Toscana", 
"Umbria", "Valle d'Aosta", "Veneto"), .rows = list(1:10, 11:20, 
    21:30, 31:40, 41:50, 51:60, 61:70, 71:80, 81:90, 91:100, 
    101:110, 111:120, 121:130, 131:140, 141:150, 151:160, 161:170, 
    171:180, 181:190, 191:200, 201:210)), row.names = c(NA, -21L
), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))

功能:

我正在练习的函数有 3 个参数:数据集(我称之为 data.moving )和 2 个附加条目:一个用于根据 denominazione_regione 列对数据进行子集化,第二个用于选择要随时间绘制的索引(我提供给函数的 data.frame 有 3 个可能的索引)

plot_by_reg <- function(df, reg, dato) {

  #d <- 
    df %>% 
    dplyr::filter(denominazione_regione == reg) %>%
    dplyr::mutate(calendario = format(as.Date(paste(mese,giorno , sep = "-" )  , format = "%m-%d" ), "%m-%d")) %>%
    dplyr::select(c(denominazione_regione, calendario, all_of(dato))) %>%
    ggplot(aes(x=df$calendario, y=df$dato)) + #, group = 1)) +
    geom_line(aes(group = 1)) +
    theme_dark()
}

问题:

当我调用该函数时,R 返回以下错误>

plot_by_reg(df = data.moving, reg = "Toscana", dato = "indice_covid")
Errore: geom_line requires the following missing aesthetics: x and y
Run `rlang::last_error()` to see where the error occurred.

相反,如果我更改 ggplot() 美学以调用函数参数(包含在函数调用中的引号“”内(我会得到一个图表,其中线条是水平的,并且 y 轴上没有实际值

plot_by_reg <- function(df, reg, dato) {

  #d <- 
    df %>% 
    dplyr::filter(denominazione_regione == reg) %>%
    dplyr::mutate(calendario = format(as.Date(paste(mese,giorno , sep = "-" )  , format = "%m-%d" ), "%m-%d")) %>%
    dplyr::select(c(denominazione_regione, calendario, all_of(dato))) #%>%
    ggplot(aes(x = calendario, y = dato) + #, group = 1)) +
    geom_line(aes(group = 1)) +
    theme_dark()
}

enter image description here

最后,如果我修改 plot_by_reg 并删除 ggplot() 部分,该函数就会起作用,打印包含 3 列的 data.frame


plot_by_reg <- function(df, reg, dato) {

  #d <- 
    df %>% 
    dplyr::filter(denominazione_regione == reg) %>%
    dplyr::mutate(calendario = format(as.Date(paste(mese,giorno , sep = "-" )  , format = "%m-%d" ), "%m-%d")) %>%
    dplyr::select(c(denominazione_regione, calendario, all_of(dato))) #%>%
    #ggplot(aes(x=df$calendario, y=df$dato)) + #, group = 1)) +
    #geom_line(aes(group = 1)) +
    #theme_dark()
}

我认为问题在于我在其中调用函数参数的方式,但就我尝试更改它而言,我总是发现错误。例如,如果我尝试传递没有“”的参数 dato ,R 会在 Error in plot_by_reg(df = data.moving, reg = Toscana, dato = indice_covid) : object "indice_covid" not found 行中抛出错误 select() ,因为它找不到元素 df$dato 。函数外的相同命令可以完美运行。

编辑

我忘了提及我正在使用的机器的功能:

Sys.info()
          sysname           release           version          nodename           machine             login 
        "Windows"          "10 x64"     "build 18362" "DESKTOP-7D7TTKL"          "x86-64"         "Filippo" 
             user    effective_user 
        "Filippo"         "Filippo" 

R.version
               _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          6.2                         
year           2019                        
month          12                          
day            12                          
svn rev        77560                       
language       R                           
version.string R version 3.6.2 (2019-12-12)
nickname       Dark and Stormy Night     

library(tidyverse)
-- Attaching packages --------------------------------------- tidyverse 1.3.0 --
v ggplot2 3.3.0     v purrr   0.3.3
v tibble  2.1.3     v dplyr   0.8.4
v tidyr   1.0.2     v stringr 1.4.0
v readr   1.3.1     v forcats 0.4.0
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
Warning messages:
1: package ‘tidyverse’ was built under R version 3.6.3 
2: package ‘ggplot2’ was built under R version 3.6.3 

最佳答案

您的函数存在两个问题。出现第一个错误是因为 calendario 不是传递给函数的 df 列。只需在指定美观时删除 df$ 即可。第二。即使删除 df$ 时,您也将 y-aesthetic 设置为等于变量 dato 中的字符串,即示例中的“indice_covid”。也就是说,对于每个日期,您都有相同的值“indice_covid”。这就是为什么你会得到一条平坦的线。要告诉 ggplot2 您想要 df 的列 dato,您必须使用 sym 和 bang-bang-operator !!< 将其转换为符号,即 !!sym(dato)。试试这个:

library(ggplot2)
library(dplyr)

plot_by_reg <- function(df, reg, dato) {

  df %>% 
    dplyr::filter(denominazione_regione == reg) %>%
    dplyr::mutate(calendario = format(as.Date(paste(mese,giorno , sep = "-" )  , format = "%m-%d" ), "%m-%d")) %>%
    dplyr::select(c(denominazione_regione, calendario, all_of(dato))) %>%
    #ggplot(aes(x=df$calendario, y=df$dato)) +
    ggplot(aes(x = calendario, y = !!sym(dato))) +
    geom_line(aes(group = 1)) +
    theme_dark()
}

plot_by_reg(df = data.moving, reg = "Toscana", dato = "indice_covid")

reprex package于2020年5月25日创建(v0.3.0)

关于r - dplyr::select 自制函数中未找到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005232/

相关文章:

graphics - ca 绘制文本属性

r - 美观必须是长度1或者与数据问题是ggplot相同

r - 如何使用 R 中的 Leaflet 可视化多条路线

r - 如何更改 ggplot2 中 x 和 y 轴的位置

r - 消除 plyr 依赖

python - R 中的矩阵乘法速度与 Python 中的一样快?

python - Op 和 Function 有什么区别

java - 整数乘法的递归定义

javascript - 如何从函数中取出变量? - Node

r - 在 R 中绘制回归输出时指定不同组的终点