[Muziek] DUSTIN TRAN: Hi. Dustin Mijn Naam. Dus ik zal presenteren Data-analyse in R. Gewoon een beetje over mezelf. Ik ben momenteel een afgestudeerde student in de Techniek en Technische Wetenschappen. Ik studeer een kruispunt van machine learning en statistieken dus Data Analyse in R echt fundamenteel wat Ik doe op een dagelijkse basis. En R is vooral goed voor gegevensanalyse want het is heel goed voor prototyping. En meestal, als je aan het doen bent een soort gegevensanalyse, veel van de problemen gaat de cognitieve. En dus wil je gewoon hebben een aantal echt goede taal die is gewoon goed voor het doen van ingebouwde functies, in tegenstelling om dat te maken met een laag niveau dingen. Dus in het begin, ik ben gewoon gaan in te voeren wat is R, waarom zou u wilt gebruiken, en ga dan over naar een aantal demo, en gewoon door te gaan vanaf daar. Dus wat is R? R is gewoon een taal ontwikkeld voor statistische berekeningen en visualisatie. Dus wat dit betekent is dat het is een zeer goede taal voor elke soort ding dat zich bezighoudt met onzekerheid of data visualisatie. Dus je hebt al deze kansverdelingen. Er gaan worden ingebouwde functies. Je hebt ook een uitstekende plotten pakketten. Python is een andere concurrerende taal voor data. En één ding is dat ik vind dat R is veel beter in is visualisatie. Dus wat zie je in de demo als goed is gewoon een zeer intuïtieve taal die gewoon werkt zeer goed. Het is ook gratis en open source, zoals is een andere goede taal denk ik. En hier, een bos van net trefwoorden gegooid op je. Het is dynamisch, wat betekent dat als je een specifieke gedefineerd object dan zal het alleen maar veranderen op de vlieg. Het is lui, dus het is slim over hoe berekeningen doet. Functioneel ingericht, wat het kan echt werken gebaseerd off van functies zo anything-- elke vorm van manipulatie je bent doet, zal het worden gebaseerd off functies. Dus binaire operatoren, bijvoorbeeld, zijn gewoon inherent functies. En alles wat je gaat doen is gaat worden vandoor functies zelf. En dan object als goed georiënteerd. Dus hier is een XKCD plot. Niet alleen omdat ik het gevoel dat XKCD is fundamenteel voor elke vorm van de presentatie, maar omdat Ik voel me als dit echt hamert op het punt dat een groot deel van de tijd dat je aan het doen bent een soort van data analyse, het probleem is niet zozeer hoe snel het loopt, maar hoe lang het gaat neemt u mee naar de opdracht programmeren. Dus hier is gewoon te onderzoeken of strategie a of b is efficiënter. Dit gaat worden iets dat je bent gaat om veel te gaan met in soort van low-level talen waar je mee bezig bent seg fouten, toewijzen van geheugen, initialisaties, zelfs het maken van de ingebouwde functies. En dit spul is allemaal afgehandeld zeer, zeer elegant in R. Dus gewoon naar deze hamer punt, de grootste bottleneck zal cognitief worden. Dus hierbij zijn zeer moeilijk probleem. Of je doet machine learning of je bent doe gewoon een soort van basisgegevens exploratie, je niet wilt hebben om een ​​document te nemen en vervolgens compileren iets wat elke keer dat u willen zien wat een kolom eruit ziet, welke specifieke ingangen in een matrix lijkt op. Dus wil je gewoon hebben een aantal echt mooie interface U kunt een eenvoudige functie run dat indexen naar wat u wilt en je draait het vanaf daar. En je domeinnaam nodig specifieke talen voor dit. En R zal echt helpen u definieert de probleem oplossen op deze manier. Dus hier is een grafiek die de programmering populariteit van R als het is gegaan in de tijd. Dus zoals je kunt zien, zoals 2013 of zodat het net opgeblazen enorm. En dit is alleen maar omdat van die enorme trend in de technologische industrie over big data. Ook niet alleen de techniek industrie, maar echt elke sector dat-- omdat veel industrieën zijn een soort van fundamenteel belang voor proberen deze problemen op te lossen. En meestal, kunt u een aantal goede hebt manier van het meten van deze problemen of ze te definiëren of ze op te lossen met behulp van data. Dus ik denk dat op dit moment R is de 11e populairste taal op TIOBE en het is al groeit sindsdien. Dus hier is wat meer kenmerken van R. Het heeft een enorm aantal pakketten en voor al deze verschillende dingen. Dus elke keer dat je een bepaald probleem, de meeste de tijd R zal die functie voor jou. Dus of je wilt bouwen een soort van machine learning algoritme Random Forest of besluit Bomen, of zelfs proberen de gemiddelde aannemen een functie of een van deze dingen, R zal hebben dat. En als je dat doet je de zorg over optimalisatie, een ding dat is normaal is dat nadat je klaar bent prototyping een soort van high-level taal, je zal gooien dat in-- je wil gewoon poort die meer dan om een ​​aantal low-level taal. Wat is er goed over R is dat als je eenmaal bent gedaan prototyping, kun je rennen C ++, of Fortran of een van deze lager niveau die direct in R. Dus dat is een echt leuke functie over R, als je echt zorgen over de optimalisatie punt. En het is ook echt goed voor web visualisaties. Dus D3.js bijvoorbeeld is Ik denk dat een ander seminar die we vandaag gepresenteerd. En dit is echt geweldig voor het doen van interactieve visualisaties. En D3.js gaat ervan uit dat je hebt een soort gegevens worden uitgezet en R is een geweldige manier te kunnen doen de data-analyse voordat u het exporteren over aan D3.js of zelfs gewoon lopen D3.js opdrachten om in R zelf, alsmede deze andere bibliotheken ook. Dus dat was gewoon de introductie van wat is R en waarom zou je het kunnen gebruiken. Dus hopelijk, ik heb ervan overtuigd dat u iets over gewoon proberen om te zien wat het is. Dus ik ga om verder te gaan en ga door sommige fundamenten over R objecten en wat je echt kunt doen. Dus hier is slechts een stelletje wiskunde opdrachten. Dat zeggen you're-- u wilt bouwen taal jezelf en je wil gewoon om een ​​bos van verschillende gereedschappen hebben. Elke vorm van exploitatie je denkt dat je zou willen is vrij veel gaat worden in R. Dus hier is 2 plus 2. Hier is 2 maal pi. R heeft een heleboel ingebouwde constanten die u vaak zult gebruiken, zoals pi, e. En dan, hier is 7 plus runif, dus runif van 1. Dit is een functie die genereert een willekeurig uniform 0-1. En dan is er nog 3 tot de macht 4. Er is worteltrekken. Er is logboek. Dus log zal nederig doen exponentiële vanzelf. En dan, als je een basis te geven, dan je kunt doen wat je wilt baseren. En dan zijn hier enkele andere commando's. Dus je hebt 23 mod 2. Dan heb je de rest. Dan wetenschappelijke heb je notatie als u ook willen gewoon meer te doen en ingewikkelder dingen. Dus hier is opdracht. Zo typisch opdrachten R gebeurt met een pijl dus het is minder dan en dan het koppelteken. Dus hier ben ik gewoon toewijzen 3 de variabele val. En dan heb ik het uit te printen val en dan drukt drie. Standaard in R tolk, het zullen dingen uit te printen voor u zodat u niet hoeft te specificeren afdrukken van een val elke keer als je iets wilt afdrukken. Je kunt gewoon doen val en dan zal dat voor u doen. Ook kunt u gebruik maken van technisch gelijk aan als een opdracht operator. Er zijn lichte subtiliteiten tussen het gebruik van de pijl exploitant en de gelijken operator voor opdrachten. Meestal door conventie, iedereen zal gewoon gebruik maken van de pijl operator. En hier, ik ben het toewijzen van deze schuine notatie genoemd 1 colon 6. Dit genereert een vector van 1 tot 6. En dit echt leuk want dan je gewoon de vector val toewijzen en dat werkt op zichzelf. Dus dit is al gaande van een single-- een zeer intuïtieve data structuur van slechts een double van een soort type in een vector en die allen zullen verzamelen de scalaire waarden voor u. Dus na gaande van scalaire, je hebben R objecten en dit is een vector. Een vector is een soort van verzamelen van hetzelfde type. Dus hier zijn een stelletje van vectoren. Dus dit is numeriek. Numeriek is R's manier van dubbel te zeggen. En dus standaard, elke nummer zal zijn van een dubbele. Dus als je c van 1,1, 3, negatief 5.7, de c een functie. Dit aaneengeschakeld drie getallen in een vector. En dit zal dus als be-- u merkt dat 3 op zichzelf, normaal gesproken zou je veronderstellen dat dit als een integer, maar omdat alle vectoren hetzelfde type Dit is een vector van dubbelspel of numeriek in dit geval. rnorm is een functie die genereert standaard normale variables-- of standaard normale waarden. En ik ben het specificeren van twee van hen. Dus ik doe rnorm 2, het toewijzen dat aan devs, en dan ga ik uit te printen devs. Dus dit zijn slechts twee willekeurige normale waarden. En dan ints als je dat doet u de zorg over gehele getallen. Dus dit is gewoon over het geheugen toewijzing en het opslaan van geheugen. Dus je zou moeten voegen uw nummers door de hoofdstad L. In het algemeen is dit Historische notatie R's voor iets genaamd lange integer. Dus de meeste van de tijd, zult u te maken krijgt met tweepersoonskamers. En als je ooit zal later op het optimaliseren van uw code, je kan het gewoon toe te voegen deze L's daarna of tijdens het als je net als precognitieve over wat je gaat om deze variabelen te doen. Dus hier is een teken vector. Dus nogmaals, ik ben het aaneenschakelen drie snaren deze tijd. Merk op dat dubbele snaren en enkele snaren zijn hetzelfde in R. Dus ik heb arthur en marvin's en zo als ik het af te drukken, allemaal gaan om dubbele snaren te laten zien. En als je wilt ook op te nemen het dubbele of enkele snaar in je personages, dan kunt u ofwel afwisselen je snaren. Dus marvin's voor de tweede element, dit is ga je show-- gewoon dubbele snaren en dan een snaar dus dit is afwisselend. Anders, als je wilt een dubbel gebruiken touwtje operator in een dubbel strijkkwartet als je aangifte te doen, dan je gewoon gebruik maken van de ontsnapping operator. Dus je doet het backslash dubbele string. Tot slot hebben we ook hebben logische vectoren. Dus logical-- dus TRUE en FALSE, en ze zijn gaan alle hoofdletters zijn. En dan, nogmaals, ik ben het aaneenschakelen hen en ze vervolgens toe te wijzen aan bools. Dus bools gaat tonen je TRUE, FALSE, en WAAR. Dus hier is gevectoriseerd indexering. Dus in het begin, ik ben het nemen van een function-- dit is een sequence-- genoemd sequentie van 2 tot 12. En ik ben het nemen van een reeks in door 2. Dus het gaat doen 2, 4, 6, 8, 10 en 12. En dan, ik ben indexering het derde element krijgen. Dus een ding in gedachten te houden is dat R indexen door vanaf 1. Dus vals 3 gaat geven u het derde element. Dit is een soort van anders dan andere talen waar het begint van nul. Dus in C of C ++, bijvoorbeeld, je bent naar het vierde element krijgen. En hier is vals 3-5. Dus een ding dat is echt cool is dat je kunnen tijdelijke variabelen binnen te genereren en dan ze gewoon te gebruiken op de vlieg. Dus hier is 3-5. Dus ik ben het genereren van een vector 3, 4 en 5 en vervolgens Ik ben het indexeren om de derde te krijgen, vierde en vijfde elementen. Zo ook is, je kunt abstracte dit gewoon doen een soort van een vector dat geeft je het indexeren. Dus hier is vals en vervolgens de eerste, derde en zesde elementen. En dan, als je wilt een aanvulling te doen, zodat je gewoon doen de min achteraf en dat zal geven u alles wat dat is niet het eerste, derde of zesde element. Zo zal dit 4, 8 en 10. En als je wilt krijgen nog meer geavanceerde, u kunt samenvoegen Booleaanse vectoren. Dus deze index gaat u deze Boolean vector van lengte 6. Dus rep TRUE komma 3. Dit wordt herhaald TRUE driemaal. Dus dit zal u een geven vector TRUE, TRUE, TRUE. rep VALSE 4-- dit gaat om je geven een vector van FALSE, FALSE, FALSE, FALSE. En dan c gaat samenvoegen die twee Booleans samen. Dus je gaat om drie te krijgen Trues en vervolgens vier FALSEs. Zodat wanneer je index vals, je bent gaan naar de TRUE, TRUE, TRUE te krijgen. Dus dat gaat om ja te zeggen, Ik wil deze drie elementen. En dan FALSE, FALSE, FALSE, FALSE gaat om nee te zeggen, ik heb geen van die elementen willen dus het is niet van plan om ze terug. En ik denk dat er eigenlijk een typo hier want dit zegt herhaling TRUE 3 en herhaal VALSE 4, en technisch, je slechts zes elementen zo herhaaldelijk valse, het moet herhalen VALSE 3 zijn. Ik denk dat R is ook slim genoeg dergelijke dat als je gewoon opgeeft 4 hier, dan het zal zelfs niet fout uit. Het zal alleen maar geven u deze waarde. Dus het zal gewoon negeren dat vierde FALSE. Dus hier is gevectoriseerd opdracht. Dus set.seed-- dit zet gewoon de zaad voor de pseudo-willekeurige getallen. Dus ik ben het instellen van het zaad tot 42, wat betekent dat als ik te genereren drie willekeurige normale waarden, en dan als je run set.seed op uw eigen computer met dezelfde waarde 42, dan krijg je ook de dezelfde drie willekeurige normalen. Dus dit is echt goed voor reproduceerbaarheid. Meestal, als je doet wat soort van wetenschappelijke analyse, je zou willen om het zaad te stellen. Op die manier andere wetenschappers kan het gewoon reproduceren exact dezelfde code die je hebt gedaan omdat ze de exacte zult hebben dezelfde random variabelen dat-- of willekeurige waarden die je uit hebt genomen ook. En dus is de vectoriële opdracht Hier toont het vals 1-2. Zo neemt de eerste twee elementen Vals en dan wijst ze naar 0. En dan, je kunt ook gewoon doen het soortgelijk iets met de Booleans. Dus vals is niet gelijk aan deze wil 0-- geven u een vector FALSE, FALSE, TRUE in dit geval. En dan, het gaat om iets te zeggen van die indexen dat waar was, dan is dat het gaat om toe te wijzen die tot 5. Dus het duurt het derde element hier en dan wijst deze toe aan 5. En dit is echt leuk in vergelijking met low-level talen waar je moet gebruiken voor het loops om dit alles te gevectoriseerde dingen doen want het is gewoon erg intuïtief en het is een one-liner. En wat is er veel over gevectoriseerd notatie is dat in R, zijn dit soort ingebouwd, zodat ze bijna net zo snel als het doen in een low-level taal als in tegenstelling tot het maken van een lus in R en dan het hebben van het te doen de dynamische indexering zelf. En dat zal langzamer dan het doen zijn dit soort gevectoriseerde ding waar hij het kan doen in parallel, waar hij doet het in threading principe. Dus hier is gevectoriseerd operaties. Dus ik ben het genereren van een waarde van 1 tot 3, toewijzen dat voor vec1, 3 tot 5, vec2, op te tellen. Het voegt ze component-wise zo het is 1 plus 3, 2 plus 4 enzovoort. vec1 tijden vec2. Dit vermenigvuldigt de twee waardeert component wijs. Dus het is 1 keer 3, 2 keer 4, en daarna 3 keer 5. En dan, op dezelfde manier kunt u ook doen comparisons-- logische vergelijkingen. Dus het is FALSE FALSE TRUE in deze geval, omdat 1 niet groter is dan 3, 2 niet groter is dan 4. Dat is, denk ik, een andere typo, 3 is zeker niet meer dan 5. Yeah. En dus kun je gewoon alles doen deze eenvoudige bewerkingen omdat hun geërfd van de klassen zelf. Dus dat was gewoon de vector. En dat is een soort van de meest fundamentele R object omdat een gegeven vector, kunt u meer geavanceerde objecten te construeren. Dus hier is een matrix. Dit is in wezen de abstractie wat een matrix zelf. Dus in dit geval is het drie vectoren, waarbij elk is een kolom, of u kunt het overwegen aangezien elk een rij. Dus ik ben het opslaan van een matrix van 1 tot 9 en dan ben ik het opgeven van 3 rijen. Dus 1-9 zul je een vector 1 te geven, 2, 3, 4, 5, 6, en helemaal tot 9. Een ding om ook in gedachten te houden is dat R slaat waarden in kolom-grote-formaat. Dus met andere woorden, als je ziet 1 tot en met 9, het gaat om them-- slaan het gaat om 1, 2, 3 in de eerste kolom, en dan zal het doen 4, 5, 6 in de tweede kolom, en 7, 8, 9, in de derde kolom. En hier zijn enkele andere gemeenschappelijke functies die u kunt gebruiken. Dus dim mat, dit zal u geven de afmetingen van de matrix. Het zal u terug een vector van de dimensie. Dus in dit geval, omdat onze matrix is ​​3 bij 3, het zal u een op te geven numerieke vector die 3 3. En hier is gewoon laten zien matrixvermenigvuldiging. Dus meestal, als je gewoon doen asterisk-- zo mat sterretje mat-- dit gaat worden component-wise operatie of wat het Hadamardproduct genoemd. Dus het gaat om elke doen element component-wijs. Echter, als je wilt matrix multiplication-- dus de eerste rij keer vermenigvuldigen de tweede matrix de eerste kolom en dus on-- je zou gebruiken Dit procent operatie. En t van de mat is slechts een operatie voor transpositie. Dus ik zeg neem de transpositie in de matrix, vermenigvuldigen met de matrix zelf. En dan dat het gaat om terug te keren naar je nog eens 3 door 3 matrix tonen het product dat u zou willen. En dat was matrix. Hier is wat een data-frame genoemd. Een data-frame die je kunt bedenken als een matrix, maar elke kolom zich gaat van een ander type. Dus wat is echt cool over data frames is dat data analyse zelf, je gaat dit allemaal heterogene data en al deze echt rommelige dingen waarbij elke kolom zelf kunnen van verschillende types. Dus hier zeg ik maak een data-frame, doe ints van 1 tot 3, en dan hebben ook een karakter vector. Dus ik kan indexeren door elk van deze kolommen en dan zal ik de waarden zelf te krijgen. En je kunt ook een soort activiteit op gegevensframes. En de meeste van de tijd wanneer u bent het doen van data-analyse of een soort van voorbewerking, dan heb je de werken met deze gegevensstructuren waarbij elke kolom gaat te zijn van een ander type. Tot slot, dus deze zijn in wezen net de vier essentiële objecten in R. List zal gewoon elke verzamelen andere objecten die u wilt. Dus het zal deze op te slaan in één variabele die u gemakkelijk kunt openen. Dus hier ben ik het nemen van een lijst. Ik zeg dingen gelijk aan 3. Dus ik ga naar één element hebben in de lijst, en dit wordt spul heet, en het gaat om de waarde 3 hebben. Ik kan ook een matrix te creëren. Dus dit is 1 tot 4 en eindrij gelijk is aan 2, dus een 2 bij 2 matrix. Ook in de lijst en het is mat geroepen. moreStuff, een tekenreeks, en zelfs een andere lijst op zich. Dus dit is een lijst die is 5 en de beer. Dus de waarde 5 en heeft de tekenreeks beer en het is een lijst in een lijst. Zo kunt u deze hebt recursieve dingen waar je hebt another-- een Typ in het type. Zo ook is, kunt u een matrix in een andere matrix, enzovoort. En een lijst is gewoon een goede manier van het verzamelen en aggregeren al deze verschillende objecten. En tot slot, hier is gewoon te helpen in het geval dit was gewoon weg heel snel voorbij. Dus wanneer je in de war bent over een soort van functie, U kunt hulp van die functie te doen. Dus je kunt hulp matrix doen of een vraagteken matrix. En hulp en het vraagteken zijn gewoon afkorting voor hetzelfde dus ze zijn aliassen. lm is een functie die doet gewoon een lineair model. Maar als je gewoon geen idee hoe dat werken, kan je gewoon hulp van lm doen en dat je sommige geven soort van documentatie ziet eruit als een soort van man-pagina in Unix, waar heb je een korte beschrijving van wat het doet, ook wat de argumenten zijn, wat is het resultaat, en gewoon tips over hoe te gebruiken, en voorbeelden ook. Dus laat me gaan en laten zien sommige demo van het gebruik van R. OK. Dus ging ik over zeer snel alleen de gegevens structuren en een soort van de op-- een deel van de operaties. Hier is een aantal functies. Dus hier ben ik gewoon gaan definiëren van een functie. Dus ik ben ook met behulp van toewijzingsoperator hier, en dan ga ik zeggen verklaren het als een functie. En het neemt de waarde x. Dus dit is geen waarde die u wilt en ik ga terug x zelf. Dus dit is de identiteit functie. En wat heb je aan deze vergelijking met andere talen en andere low-level talen is dat x van elk type zelf kan en het zal dat type terug. Dus je kunt imagine-- dus laten me alleen deze lopen snel op. Sorry. Dus een ding moet ik ook vermelden is dat deze editor ben ik met behulp heet rstudio. Dit is wat een IDE genoemd. En een ding dat is echt leuk over dit is dat het bevat veel van de dingen die je wilt doen in R op zichzelf gewoon heel intuïtief. Dus hier is een tolk console. Zo ook is, kunt u ook dit te krijgen console rauwe gewoon door het doen van een hoofdletter R. En dit is precies de hetzelfde als de console. Dus ik kan gewoon doen id functie x, x, x. En then-- en dan dat zal wel goed zelf. Dus rstudio is geweldig omdat het de console. Het heeft ook de documenten u wilt om op te draaien. En dan het heeft een aantal variabelen die je kunt zien in omgevingen. En dan, als je om percelen te doen, dan moet je kan gewoon zien dat hier, in tegenstelling tot beheren van al deze verschillende vensters zelf. Ik heb eigenlijk persoonlijk gebruik Vim, maar ik voelen als rstudio is uitstekend net voor het krijgen van een goed idee hoe R. Meestal gebruiken, wanneer je probeert te leren een aantal nieuwe taak, u niet wilt verwerken te veel dingen tegelijk. Dus R is gewoon een very-- rstudio is een zeer goede manier van leren R zonder dat te maken met al deze andere dingen. Dus hier Ik ben actief id hallo. Hierdoor keert hallo. id 123. Hier is een vector van gehele getallen. Zo ook is, want je kunt nemen elk een soort van waarde, je kunt doen terugkeren id van x zodat hij terugkeert 1234 en 5. En laat me gewoon laten zien dat Dit is inderdaad een integer. En op dezelfde wijze, als je de klas doen id x, het gaat om integer te zijn. En dan kunt u ook vergelijk de twee en het is waar. Dus ik ga kijken of id van x gelijk gelijken x en kennisgeving dat het geeft je twee Trues. Dus dit is niet te zeggen zijn de twee identieke objecten, maar elk van de ingangen in de vectoren identiek. Hier is bounded.compare. Dus dit is iets ingewikkelder in dat het een als voorwaarde en anders en dan is het twee neemt argumenten tegelijk. Dus x van elk type. En ik zeg dit Het tweede argument is. Dit kan van alles zijn als goed. Maar standaard, het gaat te nemen 5 Als u niets opgeeft. Dus hier ga ik zeggen indien x groter is dan een. Dus als ik het niet opgeven van een, het zegt als x groter is dan 5, dan ga ik op TRUE terug. anders ga ik op FALSE terug. Dus laat me gaan en te bepalen dit. En nu ga ik naar draaien bounded.compare 3. Dus het zegt is 3 minder than-- 3 groter dan 5. Nee, het is niet zo FALSE. En bounded.compare 3 en ik ga te vergelijken met een gelijk is aan 2. Dus nu ben ik ja zeggen, nu ik wil een iets anders te zijn. Dus ik ga een zeggen, je moet 2. Ik kan dit doen soort notatie of ik zeg een gelijk aan 2. Dit is een meer leesbare in dat wanneer u bent kijken naar deze echt ingewikkelde functies neem meerdere arguments-- en dit kan zijn tientallen oftentimes-- gewoon te zeggen een is gelijk aan 2 is beter leesbaar voor u, zodat later in de toekomst je weet wat je doet. Dus in dit geval, ik ben gezegde is 3 groter is dan 2. Ja dat is zo. En op dezelfde wijze, kan ik gewoon verwijderen dit en zeggen, is 3 meer dan 2 wanneer a gelijk 2. En dat is ook waar. Ja? Publiek: Bent u het uitvoeren van lijn per lijn? DUSTIN TRAN: Ja ik ben. Dus wat ik hier aan het doen is het nemen van deze tekst document-- en wat is er veel over rstudio is dat Ik kan alleen nog maar een short-- een sneltoets. Dus ik ben bezig met de Control-Enter. En dan, ik ben het nemen van de regel in het tekstdocument en dan zetten in de console. Dus hier wat ik zeg, bounded.compare en ik ben bezig met de Control-X. Dus ik kan gewoon lopen hier ook. En dan dat zal neem de lijn en dan zet het hier. En dan op dezelfde manier, ik kan niet hier lopen. En dan zal het gewoon blijven definiëren de lijnen in de console als dat. En als u ook merken de krullend beugels zijn er net als in C syntax. x-- indien de als voorwaarde is ook gaat haakjes gebruiken en dan kun je anders te gebruiken. Een ander is anders als. Dus dit gaat worden x gelijk staat voor een, bijvoorbeeld. En dan ga ik hier iets terug. Merk op dat er twee verschillende hier dingen die er gaande is. Een daarvan is dat ik hier ben specificeren keren de waarde TRUE. Hier ben ik gewoon te zeggen x. Dus R zal meestal standaard neem de laatste arguments-- of neem de laatste regel van de code, en dat zal zijn wat het is geretourneerd. Dus hier is hetzelfde zoiets als het doen van terugkeer x. En alleen maar om u te laten zien. En dan zal het werk net als dat. Dus laat me verder gaan met dit. Dus else if. En echt, ik kan terugkeren alles wat ik zou willen. Dus ik hoef niet eens te terugkeer Booleans de hele tijd, Ik kan het gewoon iets anders terug. Dus kan ik terugkeer beer doen. Dus als x gelijk is gelijk aan een, het gaat om beer terug. Anders, het gaat om TRUE terug. Ik kan ook wel een vector of echt iets. En normaliter statisch getypte talen, je zou moeten van een type dat hier opgeven. En merken dat het zomaar iets kan zijn. En R intelligent genoeg dat het zal gewoon dit te doen en het zal prima werken. Dus laat me dit te definiëren. Unexpected-- oh sorry. Het moet een accolade hier te zijn. OK. Cool. Prima. Dus laten we nu vergelijken 3 en een gelijk aan 3. Zo moet return-- yeah-- de waarde beer. Dus nu een meer algemene ding is als hoe zit het met andere datastructuren. Zodat u deze functie hebt. Dit gaat om te werken aan een soort van waarde als 3 of een numerieke, met andere woorden, dubbel. Maar hoe zit het met iets als een vector. Dus wat gebeurt er als je doen-- dus ik ben naar val tot bijvoorbeeld 4 toewijzen 6. Dus als ik terugkom dit, dit een vector uit 4, 5, 6. Laten we nu eens kijken wat er gebeurt als ik dat doe bounded.compare val. Dus dit gaat om je 15 1251 te geven. Dus met andere woorden, het is te zeggen als je kijkt naar deze aandoening dus het zegt x minder dan een of zoiets. Dus dit is iets verwarrend want nu je gewoon niet weet wat er gaande is. Dus ik denk dat een ding dat is echt goed over gewoon proberen te debuggen is dat je gewoon kunt doen val is groter dan en zie wat er gebeurt. Dus val-- een is standaard 5 dus laten we gewoon do Val van meer dan 5. Dus dit is een vector FALSE FALSE TRUE. Dus als je nu op zoek bent naar dit, het gaat om te zeggen of, en dan gaat het je dit geven is een vector van FALSE FALSE TRUE. Dus als je dit overgaan in R, R heeft geen idee wat je aan het doen bent. Omdat hij verwacht dat één waarde, die een Boolean en nu je geeft het een vector van Booleans. Dus standaard, R is gewoon gaan naar wat de heck zeggen, Ik ga ervan uit dat u bent die met het eerste element here nemen. Dus ik ga say-- ik ga aannemen dat dit FALSE. Dus het gaat om te zeggen nee, dit is niet juist. Ook gaat het om zijn val gelijk gelijk een. Nee, sorry 5. En het gaat ook vals te zijn ook. Dus het gaat om nee te zeggen, Het is niet waar ook, dus het is ga dit laatste terugkeren. Dus dit is ofwel een goede zaak of een slechte ding, afhankelijk van hoe je het te bekijken. Want als je bent creëren van deze functies, je eigenlijk niet weet wat er gaande is. Dus soms zou je een fout wilt, of misschien wilt u gewoon een waarschuwing. In dit geval heeft R dat niet. Dus het is echt aan u gebaseerd off van wat je denkt dat de taal moeten doen in dit geval als je pas in een vector van Booleans wanneer u een als voorwaarde aan het doen bent. Dus laten we zeggen dat je moest het origineel een met als anders terug TRUE en je bent ga FALSE terug. Dus een manier van abstraheren Dit is om te zeggen dat ik niet eens deze voorwaardelijke ding nodig. Een ander ding dat ik kan doen is gewoon retourneren van de waarden zelf. Dus als u merkt, als je Do Val groter is dan 5, dit gaat om een ​​terugkeer vector FALSE FALSE TRUE. Misschien is dit wat je willen voor bounded.compare. U wilt een vector van Booleans terug waarbij vergelijkt elk van de waarden zichzelf. Dus je kunt gewoon bounded.compare functieverlies, een gelijk 5. En dan in plaats van het doen van dit als voorwaarde else, Ik ga gewoon om terug te keren x groter is dan 5. Dus als het waar is, dan is het gaat om TRUE terug. En dan als het niet, het is ga FALSE terug. En deze zal voor elk van deze structuren. Dus ik kan bounded.compare c 1 6 of 9 en dan ga ik zeggen dat een is gelijk aan 6, bijvoorbeeld. En dan dat het gaat om geven u de juiste Booleaanse vector dat je het ontwerpen. Dus dat zijn slechts functies en nu wil ik alleen tonen u een aantal interactieve visuals. Ik denk niet dat ik heb eigenlijk Wi-Fi hier dus laat me gewoon doorgaan en deze overslaan denk ik. Maar een ding dat is cool is echter dat als je gewoon willen een heleboel testen verschillende gegevens opdrachten er is een heleboel verschillende datasets die al zijn voorgeladen in R. Dus een van hen is genoemd iris dataset. Dit is een van de meest bekende die in machine learning. U zult meestal gewoon doen een soort van testcases om te zien of uw code wordt uitgevoerd. Dus laten we maar eens kijken wat iris is. Dus dit ding gaat een data-frame zijn. En het is een soort van lang, want Ik gewoon uitgeprint iris. Het afdrukken van de hele zaak. Dus het heeft al die verschillende namen. Dus iris is een verzameling van verschillende bloemen. In dit geval is het vertellen u de soort ervan, al deze verschillende breedtes en lengtes van de kelk en het blaadje. En dus normaal gesproken, als u wilt iris afdrukken, bijvoorbeeld, wil je niet om het te hebben doe dit alles, want dat kan overnemen je hele console. Dus een ding dat is echt mooi is het hoofd functie. Dus als je gewoon het hoofd doen iris, dit zal u geven de eerste vijf rijen, of zes denk ik. En dan goed, je kan gewoon hier specificeren. Dus 20-- zal dit geven u de eerste 20 rijen. En ik was eigenlijk soort van verbaasd dat deze gaf me zes dus laat me ga je gang en check iris-- of het hoofd, sorry. En hier zal geven u de documentatie van wat de waarde hoofd doet. Zo geeft de eerste of de laatste van een object. En dan ga ik kijk naar de standaardinstellingen. En dan is het de standaard zegt methode hoofd x en n gelijk is aan 6L. Dus dit geeft de eerste zes elementen. En op dezelfde manier als je hier ziet, ik hoefde niet te specificeren n gelijk is aan 6. Standaard gebruikt het zes, denk ik. En dan, als ik wil opgeven van een bepaalde waarde, dan kan ik zien dat ook. Dus dat is een aantal eenvoudige commando's en hier is nog een die gewoon-- goed, Ik can-- dit is eigenlijk een beetje ingewikkelder, maar dit zal gewoon de klas elke kolom van de iris dataset. Dus dit zal je laten zien wat elk van deze kolommen zijn in termen van hun types. Dus kelkblad lengte is numeriek, kelkblad breedte is numeriek. Al deze waarden zijn numeriek omdat je kunt zien aan deze gegevens structureren deze zijn allemaal naar de numerieke. En de kolom Species zal een factor zijn. Dus normaal gesproken zou je denken dat Dit is als een tekenreeks. Maar als je gewoon doen irisSpecies, en dan ga ik kop 5 te doen, en dit gaat om af te drukken uit de eerste vijf waarden. En dan merken deze niveaus. Dus dit is saying-- dit is R's weg van het hebben van categorische variabelen. Dus in plaats van gewoon met tekenreeksen, het heeft niveaus specificeren welke van deze dingen zijn. Dus laten we zeggen irisSpecies 1. Dus wat je hier wilt doen is ik ben subsetting om deze soort column. Dus dit is de Soorten kolom en vervolgens het indexen om het eerste element te krijgen. Dus dit moet je setosa geven. En het geeft je ook het niveau hier. Dus je kunt ook vergelijken dit om het karakter setosa en dit is niet van plan TRUE omdat een is van een ander type dan de andere. Of ik denk dat het waar is omdat R is intelligenter dan dat. En het ziet er op dit en dan zegt, misschien is dit wat je wilt. Dus het gaat om het karakter te zeggen snaar setosa is dezelfde als deze. En dan op dezelfde manier, je kan ook net pak deze net zo over. Dus dat is gewoon een soort van Snelle opdrachten van de dataset. Dus hier is een aantal data exploratie. Dus dit is een beetje meer betrokken bij de gegevensanalyse. En dit wordt overgenomen van bootcamp in R voor in Berkeley. Dus bibliotheek buitenlandse. Dus ik ga om te laden in een bibliotheek die buitenlandse heet. Dus dit gaat me te geven read.dta dus neem aan dat ik deze dataset. Dit wordt opgeslagen in de huidige working directory van mijn console. Dus laten we eens zien wat de werkmap. Dus hier is mijn werk-directory. En lees dot gegevens, dit ding, wordt dit bestand te zeggen bevindt zich in de map data van deze huidige werkmap. En read.dta dit is niet een standaard commando. Ik denk dat ik laadde het in al. IEI veronderstelde Ik laadde dit in al. Maar zo read.dta is niet van plan om een ​​standaard commando. En dat is waarom je gaat te hebben om te laden in deze bibliotheek package-- Dit pakket genaamd buitenlandse. En als je het niet hebt het pakket, denk ik vreemde is één van de ingebouwde degenen. Anders kunt u ook doen install.packages en dit zal het pakket te installeren. En dit zal u R. Uh geven, nee. En dan ben ik gewoon gaan om te stoppen dit omdat ik het al. Maar wat is echt leuk over R is dat het pakketbeheer systeem is zeer elegant. Want het zal alles op te slaan echt mooi voor jou. Dus in dit geval, het gaat om op te slaan het in, geloof ik, deze bibliotheek hier. Dus wanneer je maar wilt installeren van nieuwe pakketten, het is net zo eenvoudig als doet install.packages en R zal alles te beheren de pakketten voor u. Dus je hoeft niet om iets te doen in Python, waar u externe pakket managers zoals papier Anaconda waar je bent doing-- je het installeert pakketten buiten Python en dan probeer je ze zelf uit te voeren. Dus dit is echt een leuke manier. En install.packages vereist internet. Het neemt het van een server en de repository die verzamelt alle pakketten wordt genoemd CRAN. En je kunt die soort spiegel te specificeren je wilt om de pakketten te downloaden vanaf. Dus hier ben ik het nemen van deze dataset. Ik ben het lezen van het gebruik van deze functie. Dus laat me gaan en dat te doen. Dus laten we aannemen dat je hebt deze dataset en u absoluut moet geen idee wat het is. En dit komt eigenlijk omhoog vrij vaak in de industrie waar heb je alleen deze tonnen en tonnen van rommelige dingen en ze zijn ongelooflijk ongelabelde. Dus hier heb ik dit dataset en ik weet het niet wat het is, dus ik ben gewoon zien om het te controleren. Dus ik ga naar het hoofd eerst doen. Dus ik check de eerste zes kolommen van wat deze dataset is. Dus dit is de staat, pres04, en dan al deze verschillende soort kolommen. En wat is interessant hier, denk ik, is dat je zou aannemen dat dit eruit ziet als een soort verkiezing. En ik denk dat net uit kijken naar het bestand noem dit is een soort van verzameling van gegevens over de kandidaten of de kiezers die voor specifieke presidenten gestemd of president kandidaten voor de verkiezingen van 2004. Dus hier is de waarden 1, 2 dus een manier van opslag de president kandidaten zijn hun namen. In dit geval lijkt het erop dat ze zijn gewoon integer waarden. Dus 2004, was Bush versus Kerry geloof ik. En nu, laten we zeggen dat je gewoon niet weet of 1 komt overeen met Bush of 2 komt overeen met Kerry of en zo voort en zo verder, toch? En dit is, maar voor mij, een vrij algemeen probleem. Dus wat kan je doen in dit geval? Dus laten we eens kijken al die andere dingen. staat, ik ben ervan uitgaande dat dit afkomstig uit verschillende landen. partyid, inkomen. Laten we eens kijken naar partyid. Dus misschien een ding dat je kunt doen is kijken naar elk van de waarnemingen die hebben een partyid van de Republikeinse of Democraat of zoiets. Dus laten we gewoon kijken naar wat partyid is. Dus ik ga nemen DAT en dan ga ik om dit dollarteken doen exploitant die ik eerder deed en dit gaat subset die kolom. En dan ga ik dit het hoofd in 20, gewoon om te zien hoe dit eruit ziet. Dus dit is gewoon een stelletje NAS. Dus met andere woorden, je hebt ontbrekende gegevens over deze jongens. Maar je moet ook deze merken DAT partyid is een factor dus dit geeft je verschillende categorieën. Dus met andere woorden, kan partyid nemen Democraat, republikeins, onafhankelijk, of iets anders. Dus laten we verder gaan en laten we zien welke van deze is-- oh, OK. Dus ik ga aan subset om partyid en dan kijk naar welke zijn Democraat, bijvoorbeeld. Dit gaat om u een Boole, een enorme Booleaanse van Trues en FALSEs. En nu, laten we zeggen dat ik wil aan subset aan deze jongens. Dus dit gaat mijn DAT te nemen en deelverzameling naar welke waarnemingen hebben partyid gelijken gelijk Democraat. En dit is een heel lang, want er is zo veel van hen. Dus nu ga ik dit hoofd in 20. En zoals u merkt, is gelijk aan gelijken is interessant dat je already-- je bent ook met inbegrip van de NA. Dus in dit geval, je nog steeds niet kan krijgen alle informatie want nu heb je NA en je wil gewoon om te zien welke van de observatie overeen met Democraat en niet deze ontbrekende waarden zelf. Dus hoe zou u zich te ontdoen van deze NA? Dus hier ben ik alleen met behulp van de op-toets op mijn cursor en dan zeggen bewegen. En dan hier ben ik gewoon gaan om is.na datpartyid zeggen. Dus dit en en zal nemen twee verschillende Booleaanse vectoren en zeggen dat het gaat worden WAAR en ONWAAR bijvoorbeeld. Dus het gaat om deze component-wijs doen. Dus hier Ik zeg take het dataframe, subgroep aan degenen die overeenkomen met Democraat, en verwijder alle van hen die niet NA. Dus dit will-- moet je iets geven. Laten we eens kijken is.na. Laten we proberen is.na datpartyid. En dit moet u-- geven sorry-- slechts een Boole-vector. En dan, omdat het zo lang, Ik ga aan subset tot 20. OK. Dus je moet dit werken. En deze zal ook Trues. Ah, dus mijn fout hier is dat I'm-- ik Gebruik C ++ en R door elkaar dus ik maak deze fout de hele tijd. De exploitant en is eigenlijk degene die je wilt. Je wilt niet te gebruiken twee ampersands, slechts een enkele. OK. Dus laten we zien. We subset aan de partyid waar ze Democraat en ze zijn niet van ontbrekende waarden. En laten we nu eens kijken naar welke ze stemden voor. Dus het lijkt erop dat de meeste van hen stemden voor 1. Dus ik ga om verder te gaan en zeggen dat is Kerry. En evenzo, kunt u ook naar de Republikeinse en hopelijk, dit geeft je 2. Het is gewoon een heleboel verschillende kolommen. En inderdaad, het is 2. Dus partyid alle Republikeinse, de meeste van hen zijn stemmen voor 2. Dus het lijkt, net door te kijken naar deze, Republikeinse gaat worden een very-- of de partyid gaat om een ​​zeer zijn grote factor bij het bepalen welke kandidaat ze gaan stemmen voor. En dit is natuurlijk in het algemeen waar. En dit overeenkomt met uw intuïtie, natuurlijk. Dus het lijkt alsof ik ben De tijd dringt dus laat me gewoon moet doorgaan en tonen een aantal snelle beelden. Dus hier is iets dat is iets meer gecompliceerd met visualisatie. Dus in dit geval is dit een zeer eenvoudige analyse van alleen het controleren van wat de president van '04 is. Dus in dit geval, laten we zeggen dat je wilde deze vraag te beantwoorden. Dus stel dat we wilden de stemming weten gedrag in de 2004 president verkiezing en hoe dat verschilt per ras. Dus niet alleen wilt u zie het stemgedrag, maar u wilt subset van elke ras en soort vatten dat. En je kunt alleen maar zeggen door dit complexe notatie dat dit soort steeds wazig. Dus een van de meer geavanceerde R pakketten dat is ook een soort van recente heet dplyr. Het is dus dit één hier. En ggg-- ggplot2 is gewoon een leuke manier van doen beter visualisaties dan de ingebouwde één. Dus ik ga om te laden deze twee bibliotheken. En dan, ik ga om te gaan gang en voer je dit commando. Je kan dit gewoon behandelen als een black box. Wat is er gebeurt is dat deze pijp operator is het passeren in dit argument naar hier. Dus ik zeg groep door DAT- ras en vervolgens president 04. En al deze andere opdrachten filtert en dan samenvatten waar ik telling doet en dan ben ik hier plotten het. OK cool. Dus laten we verder gaan en zien hoe dit eruit ziet. Dus wat hier gebeurt is dat ik gewoon elk van de races en vervolgens uitgezet welke ze stemden voor. En deze twee verschillende waarden komen overeen 2 en 1. Als u meer wilt zijn elegant, kunt u ook gewoon aangeven dat 2 is Kerry-- of 2 is Bush, en dan 1 is Kerry. En je kunt ook dat in je legende. En je kunt ook splitsen deze staafdiagrammen. Want één ding is dat, als u merkt, Dit is niet erg gemakkelijk te identificeren welke van deze waarden groter. Dus een ding dat je zou willen doen, is deze blauwe zone en beweeg het hier dus je kunnen deze twee naast elkaar te vergelijken. En ik denk dat dat is iets wat ik hebben geen tijd om nu te doen, maar dat is ook zeer gemakkelijk te doen. Je kunt gewoon kijken naar de man pagina's van ggplot. Dus je kunt gewoon ggplot als dat en lees in deze man pagina. Dus laat me gewoon snel toon u een aantal leuke dingen. Laten we verder gaan en ga to-- gewoon een toepassing van machine learning. Dus laten we zeggen dat we deze drie pakketten dus ik ga deze laden in. Dus dit drukt gewoon uit een aantal informatie nadat ik in het ding geladen. Dus ik zeg dit read.csv, deze dataset, en nu Ik ga om te gaan en te kijken en zien wat er in deze dataset. Dus de eerste 20 waarnemingen. Dus ik heb gewoon X1, X2, en Y. Dus het lijkt een heleboel van deze waarden zijn variërend van misschien 20 tot 80 of zo. En evenzo voor X2 en vervolgens Deze Y lijkt labels 0 en 1. Om dit te controleren, kan ik gewoon doen samenvatting gegevens X1. En dan analoog hieraan al deze andere kolommen. Dus samenvatting is een snelle manier van gewoon laten zien je snel waarden. Oh sorry. Deze moet Y. Dus in dit geval, geeft de kwantielen, medianen, maxes ook. In dit geval, dataY, je kunt zien dat het gewoon gaat worden 0 en 1. Ook de gemiddelde zegt 0,6, betekent gewoon dat het lijkt het alsof ik heb meer dan 1s 0s. Dus laat me gaan en laten zien u hoe dit eruit ziet. Dus ik ga gewoon dit perceel. Laten we eens kijken hoe dit te wissen. Oh ok. OK. Dus dit is wat het lijkt. Dus het lijkt alsof geel ik heb opgegeven als 0, en dan red ik opgegeven als 1s. Dus hier het eruit ziet label punten en het lijkt alsof je wilde slechts enkele soort van clustering op dit punt. En laat me gewoon je gang en show moet gaan u een aantal van deze ingebouwde functies. Dus hier is lm. Dus dit is gewoon proberen om een ​​lijn om deze te passen. Dus wat is de beste manier dat ik kan passen een lijn zodanig dat het best scheiden dit soort clustering. En ideaal, kun je gewoon zien dat ik alleen nog maar al deze commando's en dan, ik ga vooruit en voeg de lijn. Dus dit lijkt de beste gok. Het is het nemen van de beste die minimaliseert de fout in het proberen om deze lijn past. Uiteraard is dit ziet er soort van goed, maar het is niet de beste. En lineaire modellen, in algemeen, zullen worden echt geweldig voor theorie en gewoon soort van het gebouw fundamenten van de machine leren. Maar in de praktijk, je gaat naar willen iets meer algemene doen. Dus je kunt gewoon proberen running zoiets als een neuraal netwerk. Deze dingen zijn vaker voor. En ze fantastisch werk gewoon voor grote datasets. Dus in dit geval, wij slechts have-- laten we see-- we nrow. Dus nrow is gewoon te zeggen aantal rijen. Dus in dit geval, ik hebben 100 waarnemingen. Dus laat me gaan en maak een neuraal netwerk. Dus dit is echt leuk want ik kan alleen maar zeggen nNetto en dan ben ik regressie Y. Dus de Y die kolom. En dan achteruit het op de andere twee variabelen. Dus dit korter notatie voor X1 en X2. Dus laten we verder gaan en lopen dit. Oh sorry. Ik moet dit hele ding uit te voeren. En dit is gewoon het printen notatie voor hoe snel of niet snel het geconvergeerd. Dus het lijkt erop dat leverde convergeren. Dus laat me gaan en druk uit hoe dit eruit ziet. Zie hier de foto en hier is een contour te laten zien hoe goed het past. En dit is gewoon-- je kunt zien dit dat dit is heel erg leuk. Het zou zelfs overfitting, maar u kunt ook vertegenwoordigen deze andere technieken zoals cross-validatie. En deze zijn ook ingebouwd in R. En laat me je laten zien ondersteunen vector machine. Dit is weer een echt gemeenschappelijke techniek in de machine learning. Het is zeer vergelijkbaar met lineaire modellen, maar het maakt gebruik van wat een kernel-methode genoemd. En laten we zien hoe goed dat doet. Dus dit is erg vergelijkbaar met hoe zeker een neuraal netwerk presteert, maar het is veel soepeler. En dit is gebaseerd off van what-- hoe SVMs werk. Dus dit is gewoon een zeer snel overzicht van een aantal van de ingebouwde functies die u kunt doen en ook enkele van de gegevensexploratie. Dus laat me gewoon doorgaan en ga terug naar de dia's. Zo duidelijk, dit is niet zeer uitgebreid. En dit is eigenlijk gewoon een teaser laten zien wat je echt kunt doen in R. Dus als je zou net als om meer te leren, hier zijn een aantal verschillende bronnen. Dus als je een liefhebber bent van schoolboeken bent of je bent gewoon dol op het lezen van dingen online, dan is dit een fantastische één voor Hadley Wickham, die ook gemaakt van al deze echt cool pakketten. Als u een liefhebber van video's bent, dan Berkeley heeft een geweldige bootcamp dat is several-- dat is een soort van lang. En het zal je bijna leren alles wat je wilt weten over R. Eveneens kunnen er Codeacademy en al deze andere soort van interactieve websites. Ze worden ook steeds common-- meer en vaker. Dus dit is zeer vergelijkbaar met Codeacademy. En tot slot, als je gewoon wilt Gemeenschap en helpen, dit zijn een stelletje dingen die je kunt gaan. Uiteraard, toch zijn we Gebruik mailinglijsten, net zoals bijna alle andere programmeertaal gemeenschap. En #rstats, dat is onze gemeenschap Twitter. Dat is eigenlijk heel gewoon. En dan gebruiker! Is gewoon onze conferentie. En dan, natuurlijk, je kunt gebruik maken van al deze andere Q & A dingen, zoals stack overflow, Google, en dan GitHub. Omdat de meeste van deze pakketten en een groot deel van de gemeenschap wordt gecentreerd rond het ontwikkelen code want het is open source. En het is gewoon echt leuk op GitHub. En tot slot, kunt u contact met mij als je moet gewoon geen snelle vragen. Dus je kunt me hier vinden op Twitter, mijn website, en gewoon mijn e-mail. Dus hopelijk, dat was something-- slechts een korte teaser wat R werkelijk kan doen. En hopelijk, je gewoon check out deze drie links en zie wat je meer kunt doen. En ik denk dat het gewoon over. Thanks. [Applaus]