我正在尝试学习如何使用函数来使我的代码更易于阅读和内存。我正在练习一个函数,该函数预计使用 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()
}
最后,如果我修改 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/