CONNOR HARRIS: Still I denk dat een aantal spannende video
geproduceerd door een professionele consultancy dat gebruik maakt van R veel in zijn werk.
>> Verteller: Wat zit er achter de statistieken de analyse en de visualisaties
dat de huidige helderste data wetenschappers en zakelijke leiders vertrouwen op
om krachtige beslissingen te nemen?
U kunt niet altijd zien.
Maar het is er.
Het heet R, open source r-- de statistische programmeertaal
dat data experts de wereld dan gebruiken voor alles
van mapping brede maatschappelijke en marketing trends online
het ontwikkelen van de financiële en klimaat modellen die helpen rijden onze economieën
en gemeenschappen.
>> Maar wat is precies R en waar R beginnen?
Wel aanvankelijk, R gestart hier met twee hoogleraren
die een betere statistische wilde platform voor hun leerlingen.
Zo creëerden ze een gemodelleerd na de statistische taal S.
Zij, samen met vele anderen, bleef werken aan en het gebruik van R,
creëren van instrumenten voor R en vinden nieuwe toepassingen voor R elke dag.
>> Dankzij dit wereldwijde gemeenschap inspanning,
R bleef groeien met duizenden van de gebruiker gemaakte bibliotheken gebouwd
R functionaliteit te verbeteren en crowd-sourced kwaliteit validatie
en de steun van de meest erkende marktleiders op elk gebied dat
gebruikt R. Dat is geweldig, want R is de beste in wat het doet.
Snel ontluikende deskundigen en gemakkelijk te interpreteren, communiceren met,
en snel te visualiseren gegevens waaruit hun groeiende gemeenschap van R gebruikers wereldwijd
en zie hoe open source R blijft in vorm
de toekomst van de statistische analyse en data wetenschap.
>> CONNOR HARRIS: OK, geweldig.
Dus mijn eigen presentatie zal een beetje soberder.
Het zal niet inhouden dat veel opwindende achtergrond muziek.
Maar zoals je zag in de video, R is een soort van een algemene taal doel programma.
Maar het was vooral aangemaakt voor de statistische werkzaamheden.
>> Dus het is ontworpen voor de statistiek, voor gegevensanalyse, voor data mining.
En dus kun je dit zien in een veel het ontwerp keuzes die de makers van R
gemaakt.
Het is ontworpen voor een groot deel, mensen die niet
experts in de programmering, die gewoon oppakken programmering
aan de kant, zodat ze kunnen hun werk doen in de sociale wetenschappen of in de statistieken
of wat dan ook.
>> Het heeft een groot aantal zeer belangrijke verschillen ten opzichte van C.
Maar de syntaxis en de paradigma die het gebruikt zijn in grote lijnen hetzelfde.
En je moet vrij voelen thuis recht uit de vleermuis.
Het is een dwingende taal.
>> Niet te veel zorgen te maken over dat als je niet weet wat de term.
Maar er is een verschil tussen imperatief, declaratieve,
en functioneel.
Dwingend gewoon betekent dat u te maken verklaringen die zijn opdrachten in principe.
En dan is de tolk of de computer volgt ze een voor een.
Het is zwak getypt, zijn er geen soort verklaringen in R.
>> En dan de lijnen verschillende types
zijn een beetje meer los dan ze in C, bijvoorbeeld.
En zoals ik al zei zijn er zeer uitgebreide faciliteiten
voor grafieken, voor statistische analyse voor data mining.
Deze zijn zowel ingebouwd in de taal, de genoemde video,
duizenden van derden bibliotheken die u kunt downloaden en gratis te gebruiken
met zeer losse licentievoorwaarden.
>> Dus in het algemeen, zou ik adviseren dat je kijkt naar deze twee boeken
als je gaat werken aan R. One van hen is de officiële R beginners
gids.
Het onderhouden door de kern ontwikkelaars van R.
U kunt het opnieuw downloaden, gratis laden en juridisch bij die verwijzen daar.
Al deze dia's gaan om te gaan op het internet, op de CS50 website
Nadat dit is gedaan.
Dus geen noodzaak om te kopiëren dingen naar beneden verwoed.
>> De andere is een leerboek door Cosma Shalizi,
die is een professor aan de statistieken Carnegie Mellon, de zogenaamde Advanced Data
Analyse van een Elementaire Point of View.
Dit is niet hoofdzakelijk een R boek.
Het is een boek en statistieken Het is een gegevensanalyse boek.
Maar het is zeer toegankelijk voor mensen die hebben een zekere mate van statistische kennis.
>> Ik heb nog nooit een formele cursus genomen.
Ik weet alleen stukjes en beetjes uit diverse aanverwante onderwerpen
dat ik cursussen heb genomen.
En ik was in staat om te begrijpen dat heel goed.
>> Alle cijfers zijn gegeven R. Ze zijn gemaakt in R
en ze hebben ook codevoorbeelden onder elk cijfer dat u vertellen
hoe maak je elk figuur met R-code.
En dat is erg handig als je probeert te emuleren
sommige figuur zie je in een boek.
>> En weer gratis te downloaden stat.cmu.edu/cshalizi/ Sorry,
die moeten worden slash tilde cshalizi.
Ik zal ervoor zorgen om te corrigeren dat wanneer de officiële slides omhoog gaan.
/ ADAfaEPoV dat is gewoon de afkorting van de titel van het boek.
>> Zo algemeen caveats-- R heeft veel mogelijkheden.
Ik ga alleen in staat zijn om te dekken het oppervlak van een heleboel dingen.
Ook het eerste gedeelte van het seminar gaat iets van een data dump zijn.
Ik ben heel erg van dat.
Kortom, ga ik u kennismaken met een heleboel dingen
recht uit de vleermuis, gaan zo snel mogelijk.
En dan krijgen we het leuke gedeelte, dat is
de demo waar ik kan laten zien alles dat we hebben gesproken over op het scherm.
En je kunt rond te spelen op uw eigen.
Dus er gaat een hoop te zijn technische zaken opgeworpen hier.
Maak je geen zorgen over het kopiëren van alles wat naar beneden.
Omdat A, kunt u alle spullen op de CS50 website later.
En B, het is niet echt zo belangrijk deze memoriseren van de objectglaasjes.
Het is belangrijker dat je sommige intuïtieve faciliteit mee
en die afkomstig is van gewoon spelen rond.
>> Dus waarom R gebruiken?
Kortom, als u een project dat impliceert mijnbouw grote datasets, data
visualisatie, je R. moet gebruiken Als u bent
doet ingewikkelde statistische analyses, moeilijk in Excel zou zijn,
bijvoorbeeld, zou Ook worden goed--
als je aan het doen bent statistische analyse die is geautomatiseerd.
Laten we zeggen dat je onderhouden van een website.
En u wilt de server log te lezen elke dag en stellen een aantal lijst
als de top landen die uw gebruikers vandaan komen,
sommige samenvattende statistieken over hoe lang zij besteden aan uw website of wat dan ook.
En wilt u dit elke dag uit te voeren.
>> Nu, als je dit doet in Excel, je zou moeten gaan naar uw server log,
importeert dat in een Excel-gegevens spreadsheet,
lopen de hele analyse handmatig.
R, kunt u gewoon schrijven een script.
Plan is om elke dag te lopen vanuit het besturingssysteem.
En dan elke avond om 02:00, of wanneer u deze plannen uit te voeren,
het eruit zal zien door je internetverkeer voor die dag.
En dan de volgende dag, zult u hebben dit glanzende, nieuw rapport
of wat met alle informatie gevraagd.
>> Dus eigenlijk R is voor Cisco programmeren versus Cisco analyse.
Voorafgaande gebeurt.
Laten we in de echte dingen.
Zo zijn er drie echte soorten van de taal.
Er is numeriek type.
Er is een soort van een verschil tussen de integers en zwevende punten
maar niet echt.
Er is een personage typen, die koorden.
En er is een logische typt, dat is Booleans.
>> En u kunt omzetten tussen soorten deze functies als numeriek,
als karakter, als logisch.
Als u belt, bijvoorbeeld, als numeriek op een string,
het zal proberen om die string te lezen als een getal, net
dat A2I en scanf doen, en C. Als je bellen als numeriek op waar of onwaar
het zal converteren naar 1 of 0.
Als u belt als personage op alles wat het zal
zetten dat in een string representatie.
>> En dan zijn er vectoren en matrices.
Dus vectoren zijn in principe 1 dimensionale arrays.
Ze zijn wat we arrays bellen C. Matrices, 2-dimensionale arrays.
En dan hoger dimensionale arrays kunt u
hebben 3, 4, 5 dimensies of wat van de numerieke waarden, strijkers,
logische waarden.
>> Je hebt ook de lijsten die zijn een soort associatieve array.
Ik zal in dat een beetje.
Dus een belangrijk ding dat reizen mensen in R
is dat er geen echte, pure atomaire types.
Er is geen werkelijke onderscheid tussen een getal, als een numerieke waarde,
en een lijst van numerieke waarden.
Numerieke waarden zijn eigenlijk de hetzelfde als de vectoren met lengte 1.
En dit heeft een aantal belangrijke implicaties.
One, betekent dit dat je kunt doen dingen heel gemakkelijk dat te betrekken
zoals het toevoegen van een nummer aan een vector.
R zal in principe figuur wat bedoel je daarmee.
En ik zal dat krijgen in een tweede.
Het betekent ook dat er geen manier het soort checker-- voorzover
dat zoiets bestaat in r-- te vertellen
wanneer je bent geslaagd in enkele waarde wanneer het verwacht een array of vice versa.
En dat kan leiden tot een aantal vreemde problemen die ik tegenkwam toen
Ik was met behulp van R tijdens mijn zomerbaan.
En er zijn geen mixed-type arrays.
Dus je kunt niet hebben een scala waren de eerste elementen is, weet ik niet,
de string "Jan" en de tweede element is nummer 42.
Als u probeert om dat te doen, dan krijg je alles gewoon omgezet in een string.
Dus we hebben touwtje John, touwtje 42.
>> Zo ongewoon syntactische features-- meest R syntax is vergelijkbaar met C.
Er zijn enkele belangrijke verschillen.
Typen is zeer zwak.
Er zijn dus geen variabele declaraties.
Opdracht maakt gebruik van de vreemde error operator minder dan koppelteken.
Reacties zijn met het hekje.
Ik denk dat nu dagen noemen we het hashtag maar dat is niet echt accurate-- niet
dubbele slash.
>> Modulaire resten zijn met %% tekenen.
Integer divisie is met% /%, wat zeer moeilijk te lezen wanneer het wordt geprojecteerd
op het scherm.
U kunt bereiken van krijgen integers met de dikke darm.
Dus 2,5 geeft je een vector te geven alle nummers 2 tot 5.
>> Arrays zijn one-geïndexeerd, die schroeven veel mensen
up als ze uit meer typische programmeertalen,
zoals C, waar de meeste dingen zijn zero-geïndexeerd.
Nogmaals, dit is waar R erfgoed als een taal voor als niet
professionele programmeurs komt.
Als je een socioloog of een econoom of iets
en je probeert te gebruiken R in principe als een aanvulling
uw belangrijker professionele werk,
je gaat vinden one-indexeren van een beetje meer natuurlijk.
Omdat je begint te tellen 1 in het dagelijks leven, niet 0.
>> Voor lussen, is vergelijkbaar de foreach construct in PHP,
die u krijgt leren in-- vrij snel.
Dat is voor de waarde in vector en dan kan je dingen met waarde.
Doelgroep: Dat is komen in collegezaal.
CONNOR HARRIS: Oh, dat is komen lezing, uitstekend.
Doelgroep: De opdracht is, is het veronderstelde punt van rechts naar links?
CONNOR HARRIS: Van rechts naar links, ja.
U kunt denken aan het als de waarde op rechts geschoven in de variabele
aan de linkerkant.
Publiek: OK.
>> CONNOR HARRIS: En tot slot syntaxis van de functie is een beetje vreemd.
U hebt de functie naam foo, toegewezen om dit zoekwoord functie, gevolgd
door alle argumenten en daarna de orgaan van de functie daarna.
Ook deze dingen kan lijkt een beetje vreemd.
Ze zullen een tweede natuur geworden na je werkt met de taal voor een beetje.
Dus vectoren, de weg u de bouw van een vector
is dat je het type C, dat is een sleutelwoord, dan alle nummers die u wilt of strings
of wat dan ook.
Argumenten ook vectoren.
Maar de resulterende matrix wordt afgevlakt.
Dus je kunt niet arrays, waar hebben sommige elementen zijn enkele nummers
en sommige elementen zijn arrays zelf.
>> Dus als u probeert een te construeren serie waren de eerste element is 4
en het tweede element is de matrix 3,5 je
gewoon een drie elementen array, 4,3,5.
Ze kunnen niet van gemengde type.
Als u probeert te lezen of te schrijven buiten de grenzen van een vector
zult u deze waarde genoemd NA een krijgen wat staat voor een ontbrekende waarde.
En dit is bestemd voor zoals statistici die
werken met onvolledige datasets.
>> Als u een functie die wordt verondersteld van toepassing slechts één nummer naar een array
dan wat je krijgt is, de functie in kaart over de array.
Dus als je de functie laten we zeggen neemt een nummer en het rendement dat plein.
U vraagt ​​dat aan de array 2,3,5 Wat je krijgt is de array 4,9,25.
>> En dat is erg handig omdat het u betekent
niet hoeft te schrijven voor de loops voor doet het heel simpele dingen zoals het aanbrengen
een functie om alle leden van een dataset.
Die, als je werkt met grote datasets, moet je veel doen.
Binaire functies toegepaste invoer door invoer.
Ik zal krijgen in dat.
U kunt ze openen met arrays of vectoren met vierkante haken.
Dus vector naam vierkante haken 1 zul je het eerste element te geven.
Vector naam vierkante haakjes 2 zult u het tweede element te geven.
>> U kunt doorgeven een vector indices en u zult
terug uit eigenlijk een sub-factor.
Dus je kunt vector naam haakjes C te doen, 2,4 en je krijgt een vector die
de tweede en vierde elementen van de array.
En als je wil gewoon een snelle samenvatting statistiek
van een vector zoals interquartile range, mediaan, maximum, wat dan ook,
je kunt gewoon typen overzicht vector naam en krijgen dat uit.
Dat is niet echt handig in programmeren, maar als je speelt
rond de datasets, is het handig.
>> Matrices-- principe hogere dimensionale matrices.
Ze hebben deze speciale notatie syntax.
Matrix met een array die krijgt gevuld in-- sorry, matrix met data,
aantal rijen, aantal kolommen.
Wanneer u een aantal data, het vult in de array principe gaat van boven naar beneden
eerste.
Vervolgens van links naar rechts.
Dus, als dat.
En R heeft een ingebouwde matrix vermenigvuldigingen,
spectrale ontleding diagonalisatie, een heleboel dingen.
Als u wilt hoger dimensionale arrays, dus 3, 4, 5,
of wat afmetingen kun je dat doen.
De syntax is scala dim gelijk aan c, dan is de lijst van de dimensies.
Dus als je wilt een 4-dimensionale array met afmetingen 4, 7, 8, 9, de array,
dim is gelijk aan c (4,7,8,9).
>> U krijgt toegang tot enkele waarden met beugels eerste vermelding komma tweede item.
Je kunt hele plakjes krijgen rijen of kolommen.
Met deze incomplete syntax het gewoon rijnummer komma of komma kolom
aantal.
Dus lijsten zijn een soort geassocieerde array.
Ze hebben hun eigen syntaxis hier.
Opnieuw doen niet krampachtig kopieer alle dit omlaag.
Dit is gewoon zo dat de mensen gaan door de slides later
hebben dit alles in een mooie referentie.
En dit zal heel natuurlijk eens geworden Ik heb eigenlijk wandeling door de demo's.
Zo noemt een fundamenteel verbonden arrays.
U kunt waarden benaderen met lijstnaam, dollarteken, toets.
Dus als je de lijst wordt genoemd foo, dan kun je deze openen als dat.
U kunt een hele key-waarde paar krijgen door het passeren op het plein beugel index.
Als je leest van een niet-bestaand key, krijg je nul.
Het zal niet fout.
Ding is, R zal doen als veel met null als het kan.
En dit kan betekenen dat als je niet verwacht nul uit te komen
van enkele lijst te lezen, moet u een aantal te krijgen onvoorspelbare fouten verder omlaag
de lijn.
>> Dit gebeurde voor mij mijn zomerbaan toen ik met R
waar ik veranderd hoe een bepaald lijst is gedefinieerd in één plek
maar niet later veranderen op het code die waarden te lezen uit het.
En dus wat er gebeurd was ik was lezen null-waarden uit deze lijst,
leiden daarvan naar functies en zijn erg in de war
toen ik allerlei willekeurige oneindigheden opduiken
in deze functie.
Want als je bepaalde maximale toepassing of minimale functies op null,
je krijgt oneindige waarden.
>> Dataframes, ze zijn een subklasse van de lijst.
Elke waarde is een vector van dezelfde lengte.
En ze worden gebruikt voor de presentatie, in principe, tabellen.
Er is dit initialisatie syntax.
Dit alles wederom veel worden duidelijker als je naar de demo.
En het leuke van gegevensframes is dat je
kunnen namen alle kolommen geven en namen alle rijen.
En dus dat maakt de toegang ze een beetje vriendelijker.
Ook dit is hoe de meeste functies die ingelezen gegevens uit Excel-spreadsheets
of tekstbestanden bijvoorbeeld zal lezen in hun gegevens.
Ze zullen het in te zetten een soort van data frame.
Dus functions-- functies syntax is een beetje raar.
Wederom is de naam van de functie, toewijzen, dit zoekwoord functie en vervolgens
de lijst van argumenten.
Dus er zijn een aantal leuke dingen over hoe functies werken hier.
Voor één, kun je eigenlijk toewijzen standaardwaarden van bepaalde argumenten.
Dus je kunt zeggen R1 equals-- kunt u foo zeggen
een functie waarin R1 gelijk iets standaard als de gebruiker specificeert
geen argumenten.
Anders is het wat hij zette in.
En dit is zeer handig omdat veel van onze functies
hebben vaak tientallen of honderden argumenten.
Bijvoorbeeld degenen voor het plotten grafieken of plotten puntgrafieken
hebben argumenten die controle alles van de titel en de as
labels aan de kleur van regressielijnen.
En dus als je niet wilt om mensen te laten specificeren
elk van deze honderden argumenten
het beheersen van elk aspect van een perceel of een regressie of wat dan ook,
het is leuk om deze standaardwaarden te hebben.
>> En dan kun je eigenlijk Schrijf zoals je hier zag terug.
Of zoek een beter voorbeeld.
Wanneer u functies gesprek kunt u eigenlijk noemen ze met het argument namen.
Dus hier is een voorbeeld van de matrix constructeur.
Het duurt drie argumenten.
Meestal moet je data, die een vector.
U N rij, die is het aantal rijen.
U N cols-- aantal kolommen.
Het ding is als u typt N rij is gelijk aan wat
en N col gelijk aan wat toen je oproepen van deze functie,
je eigenlijk kan keren hen.
Dus je kunt N col eerste en N rij gezet tweede en het zal geen verschil maken.
Dus dat is een leuke feature.
>> Deed import en export.
Dit kan, in principe.
Er zijn ook faciliteiten uit te schrijven willekeurige R-objecten naar een binair bestand
en dan lezen ze terug in later.
Dat is handig als je aan het doen bent een grote interactieve sessie R
en wat je nodig hebt om op te slaan dingen heel snel.
Standaard heeft R een werkmap dat bestanden krijgen uitgeschreven in
en lees terug uit.
Je kunt zien dat met getwg, veranderen met setdw.
Niets bijzonder interessant hier
>> Dus nu de werkelijke statistieken stuff-- multilineaire regressie.
Dus de gebruikelijke syntax is een beetje ingewikkeld.
Het model is een groot object in principe.
Het wordt toegewezen lm, die een functieaanroep.
Het eerste element, de y tilde x1 plus wat dan ook.
Mijn syntax hier is een beetje verwarrend.
Ik ben vrij sorry, dit is de standaard manier
dat informatica boeken doen.
Maar het is een beetje raar.
>> Dus eigenlijk, het is lm haakjes, eerste punt
wordt variable-- sorry, afhankelijk variabele tilde x1 plus x2 plus
hoeveel onafhankelijke variabelen je hebt.
En dan zijn deze kan zowel vectoren, allemaal dezelfde lengte.
Of ze kunnen kolom headers in een dataframe
dat je gewoon opgeeft in het Het tweede argument van data frame.
>> U kunt ook opgeven een complexe formule
dus je hoeft niet lineair te terugvallen één afhankelijke variabele,
of een vector op een reeds bestaande vector.
Je kunt doen, bijvoorbeeld een vector component y kwadraat plus 1
en regressie dat tegen log van een andere vector.
U kunt samenvattingen van de afdrukken model met deze opdracht genoemd
summary-- net samenvatting parens model.
Weer iets anders ik zou moeten verduidelijken.
Iets anders dat te zullen gecorrigeerd wanneer de dia's te gaan op het internet.
Als je gewoon wilt berekenen een eenvoudige correlatie
u kunt correlatie vector gebruiken 1 vector 2 functie kern.
Methode is standaard Pearson correlaties.
Dat zijn de standaard die je kunt doen.
Er zijn ook Spearman en Kendell correlaties
Daarin is een aantal rangorde correlatie.
Nou ze niet berekenen product momenten tussen de vectoren zelf,
maar van de vector rang orders.
Ik zal dat later uitleggen.
>> PUBLIEK: Snelle vraag
>> CONNER HARRIS: Zeker.
>> Publiek: Dus als je de berekening om de eenvoudige correlaties te doen
je ervan uitgaan dat er een statistisch betekenis voor de correlatie?
CONNER HARRIS: Je hoeft niet.
Een lm is eigenlijk gewoon een machine.
Het zal in twee zaken en het zal uitspugen
coëfficiënten voor de beste pasvorm lijn.
Het rapporteert eveneens standaard fouten op die coëfficiënten.
En het zal u vertellen, zoals de intercept statistisch significant
of verschil 0.
Is de helling van de best fit lijn statistisch
nul is, et cetera.
Dus het neemt niets, denk ik is het beste antwoord op uw vraag.
OK.
>> Plotting-- dus de belangrijkste reden dat je moet Gebruik R, zoals multilineaire regressie.
In principe elke taal heeft enkele voorziening voor.
En eerlijk gezegd R's syntaxis voor regressie is een beetje geheimzinnig.
Maar plotten is waar het echt schijnt.
>> Het werkpaard functie is plot en het neemt twee vectoren, x en y.
En dan de ellipsen staat voor een groot aantal optionele argumenten
controle alles van titels aan kleuren van verschillende lijnen of diverse punten
de aard van de plot.
U kunt scatter hebt percelen of lijn percelen.
>> [Onverstaanbaar] 2 vectoren van dezelfde lengte.
U kunt dit voorafgaan met hechten data frame in uw script.
En dit laat je gewoon column gebruiken headers in plaats van afzonderlijke vectoren.
U kunt het best passende lijnen en lokale voegen regressie bochten om uw grafiek.
>> Deze commando's vermeld hier, ab lijn en lijnen,
Standaard deze krijgen geschreven in pop-upvensters
omdat het veronderstelt dat u gebruikt R interactief.
Als je niet kunt u schrijf twee bestanden die
zijn echt een formaat dat u wilt.
Sorry, ik heb een typfout ik net gerealiseerd.
Als u wilt openen andere grafische apparaat
U kunt deze functie genaamd PNG of gebruik JPEG of een heleboel andere beeldformaten.
En u kunt grafieken te schrijven wat bestandsnaam die u opgeeft.
Annuleren dat je use-- Ik heb dit niet te schrijven in de slide--
maar er is een functie genaamd dev dot uit dat neemt geen argumenten.
>> Dan zijn er faciliteiten 3D plotten
en voor de contour plotten Als u wilt maken
grafieken van twee onafhankelijke variabelen.
Ik zal niet in deze nu.
>> Er zijn ook enkele faciliteiten voor animatie
deze zijn gewoonlijk onderhouden door derden.
Ik heb animaties met R grafieken gedaan, maar ik heb niet gebruikt deze derden
libraries.
Dus ik kan niet echt getuigen hoe goed ze zijn.
Wat ik aanraden als je wilt om animaties te maken met R
is kunt u uit te schrijven alle de frames voor animaties
en dan kun je gebruik maken van een derden program--
typische degenen zijn FFmpeg genoemd of ImageMagick-- om te borduren
al je frames in een animatie.
>> Dus tijd voor de demo.
Dus als je met behulp van een Unix-achtig systeem dat is Linux BSD, maar die BSD gebruikt.
OS X opent u een terminal venster en Typ R bij de opdrachtprompt.
Als u R studio of dergelijke, die ook werkt.
Voor Windows-gebruikers moet u in kunnen R vinden in het menu Start.
Het moet iets worden genoemd zoals R x64 3 punt wat dan ook.
Open die daarboven.
>> Dus nu laat me gewoon Open een terminal venster.
Oké, zoeken.
PUBLIEK: Command-Space
CONNER HARRIS: Command-Space, dank je.
Ik denk niet normaal gebruik Macs.
Terminal, tonen een nieuw venster.
Nieuw venster is instellingen basic, R. Dus je moet krijgen
een welkomstbericht, zoiets als dit.
>> Dus ik ben met behulp van R interactief.
U kunt ook schrijven R scripts natuurlijk.
Eigenlijk scripts exact dezelfde manier als
als je achter de computer typen in elke lijn één tegelijk.
Dus laten we beginnen met het maken van een vector.
Een pijl C 1, 2.
1, 2, 4.
OK zeker.
Ik kan de lettergrootte groter te maken.
>> PUBLIEK: Command-Plus
>> CONNER HARRIS: Command-Plus.
Command-Plus.
Oké, wat is dat?
Goed?
OK.
Dus laten we beginnen met het waarbij een vector lijst.
Doe een, pijl, C 1,2,4.
We kunnen zien.
Maak je geen zorgen over de beugel daar.
De beugels zijn dus als je uitprinten zeer lange arrays, kunnen wij waar je bent.
Een voorbeeld zou zijn als ik wil gewoon bereik 2-200.
Als ik gedrukt een zeer lange array, de beugels
zijn gewoon zo kan ik blijven bijhouden welke index
we op als ik ben op zoek door deze visueel.
Dus hoe dan ook, we hebben een.
>> Dus ik al eerder gezegd dat arrays interageren zeer mooi met, bijvoorbeeld,
unaire operaties zoals dit.
Dus wat je denkt dat ik zal als ik typ een plus 1?
Yep.
Juist, nu ik zorg Deze verschillende array.
Laten we zeggen dat b c 20,40, 80.
Dus wat denk je Dit commando zal doen?
Voeg de elementen.
En dus in feite dat is wat het doet.
Dus dit is erg handig.
Dus hoe zit ik dit doe. c is, laten we zeggen, 6 keer 1-10.
Dus wat doe ik wil zien bevatte, denk je?
Dus alle veelvouden van zes.
Nu, wat denk je zal er gebeuren als ik dit doen?
Ik zal dit een beetje duidelijker, c, c maken.
Dus wat gebeurt, doe je denk, als ik dit doe?
een plus c.
[ONHOORBAAR]
>> PUBLIEK: Ofwel een fout of er gewoon voegt de eerste drie elementen.
>> CONNER HARRIS: Niet helemaal.
Dit is wat we hebben gekregen.
Wat er gebeurt is een kortere array, een, werd gefietst.
Dus kregen we 124, 124, 124.
Ja.
En eigenlijk, kunt u bekijken dit gedrag voor, een plus 1,
als een subklasse van dit probleem, waarbij de kortste array is alleen het aantal
1, dat één element array.
Ik gewoon te zeggen alle vector de tijd in plaats van de array,
want dat is wat de r documentatie meestal doet.
Het is een ingesleten gewoonte c.
>> OK, en dus nu hebben we deze array.
Dus we hebben deze array, c.
We kunnen samenvatting krijgen statistieken over c, samenvatting c.
En dat is leuk.
Dus laten we nu doen wat matrix dingen.
Laten we zeggen dat m is een matrix.
Laten we het een drie bij drie een.
Dus nRows gelijk aan 3, en nCols gelijk aan 3.
En voor data laten doen-- dus wat denk je dat dit gaat doen?
>> Juist, het is de volgende.
Het is nrow en ncolumn.
Dus wat ik heb gedaan is dat ik heb verklaarde een drie bij drie-matrix
en ik heb aangenomen in een negen-element array.
Dus de logaritme van de elementen één tot en met negen.
En al die waarden te vullen de array-- spijt?
PUBLIEK: Dat zijn base 10 logs?
CONNER HARRIS: Nee, log natuurlijke logaritme, zodat base e.
Ja, als je wilde base 10 log, ik denk dat je zou moeten
om in te loggen wat dan ook, gedeeld door log 10.
En zo de gegevens van de [onverstaanbaar] gewoon vult de matrix, dus van boven naar beneden,
vervolgens van links naar rechts.
En als je wilde een ander te doen array, laten we zeggen n matrix.
Laten we het doen, weet ik niet, 2-13.
Of ik iets interessanter te doen.
Ik doe 2-4.
nrow evenaart, laten we zeggen, 3.
Ncol gelijk aan 4.
n.
Daarom hebben we deze gekregen.
>> En nu willen we deze vermenigvuldigen, we zouden n procent tijden procent te doen,
want dat is n.
En we hebben matrix producten.
Door deze manier, heb je zien hoe toen ik verklaarde n, de 2-4
vector kreeg fietste totdat het vol alle n?
Als je wilde nemen eigenwaarde decompositie,
Dit is iets wat we heel gemakkelijk doen.
We kunnen Eigen n doen.
En dus dit is onze eerste ontmoeting met een lijst.
>> Dus Eigen n is een lijst met twee sleutels.
Waarden, die deze array hier.
En vectoren, die deze array hier.
Dus als je wilde halen, zeggen, deze derde kolom
van de eigenvectoren matrix, omdat de eigenvectoren zijn kolomvectoren.
Dus we kunnen VEC Eigen n dollarteken doen vectoren, comma 3, van [onverstaanbaar].
Vec.
Is dat, zoals je zou verwachten.
>> Zeg dan n keer procent tijden vec.
Dus hier het resultaat ziet er zeker als als we de derde eigenwaarde hier
wat overeenkomt met de derde eigenvector.
Het vermenigvuldigd gewoon alles in deze eigenvector, component-wise,
door de eigenwaarde.
En dat is wat we zouden verwachten, want dat is wat eigenwaarden zijn.
Heeft hier iemand niet genomen lineaire algebra?
Een paar mensen, OK.
Zet gewoon je hersenen af ​​voor een beetje.
En inderdaad, als we Eigen n dollarteken waarden 3 keer vec,
goed krijgen hetzelfde.
Het is anders geformatteerd als een rij vector in plaats van een kolomvector,
maar big deal.
En dus die zijn in principe de leuke dingen die we kunnen doen met matrices,
gedemonstreerd lijsten.
Ik zou het leuk te tonen dingen over functies.
>> Dus laten we say-- [onverstaanbaar] functie, bel laten we
Het func tegen functie n n squared-- eigenlijk, dat is niet echt de beste.
a, b, een kwadraat plus b.
Dus een ding over functies weer, is zij
do expliciete terugkeer verklaringen niet nodig.
Dus je kunt het gewoon-- laatste verklaring geëvalueerd
zal de verklaring terug te zijn, of de waarde geretourneerd.
Dus in dit geval, we alleen evalueren een statement, een kwadraat plus b.
Dat zal de standaard return waarde.
Het kan nooit kwaad om te zetten expliciet terug waarden,
vooral als je te maken hebt met een functie van zeer ingewikkelde logica
stromen.
Maar je ze niet nodig hebt.
Dus nu kunnen we func 5, 1 doen en Dit is eigenlijk wat je zou verwachten.
Iets anders wat we kunnen doen, kunnen we eigenlijk doen func b
gelijk aan 1, een 5 gelijk.
Dus als we hier specificeren welk nummer, die redenering gaat naar die argumenten
in de functie, kunnen we rond spiegelen deze waarden waar we willen.
>> PUBLIEK: Is er een reden om het uit te schrijven met de b
gelijk in tegenstelling tot enkel het gebruik van de nummers en de komma?
CONNER HARRIS: Ja, meestal Dit doen als je functies
met veel argumenten.
Dat zou vaak worden als vlaggen die je zou alleen
wilt gebruiken in zeldzame gevallen.
En deze manier kun je je only-- kan verwijzen naar de specifieke argumenten
die u wilt gebruiken niet-standaard waarden voor,
en je hoeft niet een uit te schrijven stelletje vlaggen gelijk valse na hen.
Of ik kan dit opnieuw te schrijven met een standaardwaarde als b is gelijk aan 2.
En dan kon ik f func doen, Ik doe 4, 1 deze tijd.
En 17, die 4 vierkante plus 1, zoals je zou verwachten.
>> Maar ik kon ook gewoon Dit noemen met func 4,
en ik krijg 18, omdat Ik wil niet opgeven b.
Dus b krijgt de standaard waarde van 2.
>> OK, dus als je nu bent volgende samen met de demo,
typt u deze lijn op uw commando prompt en zie wat omhoog komt.
Eigenlijk, doe dat niet.
Vul dit.
Je moet iets als dit te krijgen.
Dus mtcars is een ingebouwde data die voor deze demonstratie
doeleinden die komt met-- die komt in standaard met uw r distributie.
Dit is een compilatie van statistieken uit een 1974 nummer van het tijdschrift Motor Trend's
een aantal verschillende modellen.
>> Dus er is mijl per gallon, cylinders-- Ik vergeten wat disp is-- pk.
Waarschijnlijk.
Als je gewoon Google MT auto's, dan is een van de eerste resultaten
zal de officiële r documentatie
en het uitleggen deze gegevensvelden.
Dus gewicht is-- gew gewicht van de auto in tonnen.
Q sec is de kwart mijl tijd.
Dus nu kunnen we een aantal leuke dingen te doen over MT auto's is een data veld.
>> Dus kunnen we dingen doen zoals rij namen, mt auto's.
En dit is een overzicht van alle rijen in de set gegevens die de namen van de auto's zijn.
We kunnen colnames, mt auto's doen.
Als je dat doet mt auto's, sub-numerieke index, net als 2.
krijgen we de tweede kolom uit Dit, hetgeen cylinders.
>> Publiek: Wat heb je gedaan?
>> CONNER HARRIS: Ik typte mt auto's, beugels e,
die mij de tweede gaf kolom van mt auto.
Of als we willen een rij, kan ik typ mtcars komma 2, bijvoorbeeld.
Andere ronde 2 komma, als dat.
En dat gaat in uw rij.
Dit hier gewoon geeft u een column, maar kolom als vector.
Ik besefte nu dat ik vergat aan te tonen
een aantal leuke dingen over vectoren dat je kunt doen met indices.
Dus laat ik dat doen nu.
Dus laten we het doen c gets-- zetten Deze op pause-- 2 keer 1-10.
Dus c is gewoon gaat worden de vector 2 tot en met 20.
Ik kan elementen nemen als dit, c2.
Ik kan overgaan in een vector als deze, C-- laat me
Gebruik andere naam dan c, zoals vec c.
Kortom, ben ik aan het doen dit zodat je niet krijgen
verward tussen c als vector bouw functie,
en c als een variabele naam.
Vec beugels c 4, 5, 7.
Dit zal me uit de vierde, vijfde, en zeven elementen van de array.
Ik kan vec doen, in een negatieve index, net als negatief 4.
Dat zal me dit te krijgen met het vierde element verwijderd.
Dan als ik wilde plakken doen, Ik kan vec 2 doen tot en met 6.
2 dubbele punt 6 is gewoon een andere vector, die 2, 3, 4, 5, 6.
Spuugt dat.
>> Dus hoe dan ook, terug naar mt auto's.
Dus laten we doen wat regressies.
Laten we zeggen dat model gets-- laten lineair regress-- Ik weet het niet.
Laten we eerst doen hechten mtcars, natuurlijk.
Dus [onverstaanbaar] model lm, laten we terugvallen mijl per gallon op tilde gewicht.
En dan data frame mtcars.
Dus samenvatting model.
>> OK, dus dit lijkt een beetje ingewikkeld.
Maar in principe, aangezien als we probeer mijl per gallon te uiten
als een lineaire functie van het gewicht, toen kwamen we deze lijn hier,
die onderschept op 37,28.
37,28 zou de theoretische mijl per gallon van een auto die nul weegt.
En dan voor elke extra ton, je knock ongeveer vijf mijl per gallon
off van dat.
Beide coëfficiënten u kan er, standaard fouten te zien.
En ze zijn zeer statistisch significant.
>> Zo kunnen we heel zeker te zijn 1 e 10 de negatieve 10.
Dus 1 keer iets aan de negatieve 10, dat als je een zwaardere auto te maken,
het zal moeten erger mijl per gallon.
Of we kunnen een ander model te testen.
Zoals in plaats van achteruit dit gewicht,
laten we terugvallen het op logboek van het gewicht, want misschien de effectieve gewicht
op kilometerstand is een of andere manier niet lineair.
>> Dit gaf ons een r kwadraat van 0,7528.
Dus laten we proberen dit.
Deze keer laten we een andere variabele, ook.
Model2.
Dus Kortom, model2.
Oké, dus nogmaals, we kregen hier onze best passende lijn.
En dit tijd-- dit zegt, in feite dat elke keer dat u
verhoging van het gewicht van een wagen met een factor e
je verliest zoveel mijl per gallon.
>> En dus deze keer onze resterende standaard fout het-- dat maakt niet uit, echt.
De resterende standaard fout eigenlijk gewoon de standaard fout
dat je nog hebt na neem de trendlijn weg.
En onze r hier kwadraat is 0,81, dat is een beetje beter dan wat
we eerder hadden, 0,52.
>> En nu laten we voegen een termijn regressie.
Dus laten we terugvallen mijl per gallon zowel op het logboek van de gewichten
en, laten we het doen, q mijl, kwart mijl tijd.
OK, moet het the-- goed, qsec hebben.
Qsec.
Actually-- sorry, wat?
Laat me dit iets te bellen anders naast model2.
Laat me dit model3 noemen.
En nu kunnen we samenvatting model3 doen.
En dus nogmaals, dit is in feite wat je zou verwachten.
Je hebt een positieve onderscheppen.
De effectieve toenemende gewicht is negatief.
En de effectieve toenemende kwart mijl tijd
is positief, maar wel minder dan gewicht.
Nu intuïtief, kunt u gevoel van te maken dit door te zeggen na te denken over sportwagens.
Er is een zeer snelle acceleratie, een zeer korte kwart mijl tijden.
Ze zijn ook van plan om meer gas te gebruiken, terwijl verstandiger auto's gaan
trager acceleratie, hogere kwart mijl tijden,
en het gebruik van minder gas ,, zo hoger mijl per gallon.
Grote.
En nu is het tijd om plot iets als dit.
Dus laten we doen-- zo kaal botten kunnen we plots-- doen
omdat ik deze data-frame hebben bevestigd before-- we kunnen gewoon doen percelen, gew mpg.
Maken dit een beetje groter.
Daar we in principe een scatter plot, maar de punten
zijn een beetje moeilijk te zien op dit punt.
>> Ik weet niet onvoorbereid wat het onthouden syntax is voor het veranderen van het perceel.
Dus ik denk dat dit zal zijn een goed moment om te brengen,
er is een zeer mooie ingebouwde help functie, hulp citaten functioneren naam.
We zullen up principe brengen alles wat je wilt.
Ik denk dat ik dit ook daadwerkelijk te doen soort gelijk p voor punten percelen.
Heeft die iets veranderen?
En nee, niet echt.
Prima.
>> Om een ​​of andere reden, toen ik dit deed op mijn eigen computer een tijdje geleden,
alle scatter punten waren veel duidelijker.
Hoe dan ook, zijn de scatter soort zichtbaar?
Er is één daar.
Een paar daar, een paar daar.
U kunt ze soort van te zien, toch?
Dus als we willen een best passende lijn toe te voegen om dit perceel hier, dat is een beetje kaal
bones-- laat me het een beetje mooier.
Hoofd gelijk versus gewicht.
Mijl per gallon.
Ook hier kunt u zien hoe nuttig optionele argumenten zijn hier met ook
niet hebben om dingen in te zetten bepaalde volgorde met argumenten toetsenbord
als je plots, omdat deze nemen veel argumenten.
>> XLAB is gelijk aan het gewicht, gewicht, ton.
Prima.
OK, ja, dit apparaat is een beetje vervelend.
Maar je kunt een soort van daar te zien, er is een grafiek titel op de zijkant.
Hier there's-- op de bodem hier zijn er aslabels.
Ik herinner me niet onvoorbereid wat de commando ars--
welke functies stijgen de grootte van de labels en titels
maar ze zijn er.
>> En dus als we willen voeg de best passende lijn,
we iets konden doen like-- I hebben de syntax hier opgeschreven.
Zo herinneren we ons voeg model was mpg, gewicht, mtcars.
En dus als ik wilde een beste pasvorm toe lijn, kon ik a, b lijn model doen.
En giek, hebben we een best passende lijn.
Het is een beetje moeilijk om weer te zien.
Ik ben heel droevig over de technologische moeilijkheden.
Maar het loopt in principe linksboven naar rechtsonder.
>> En als de schaal waren grotere voorsprong
dat het snijpunt is wat je kan vinden van de samenvattende statistieken
Als u typt samenvatting model.
OK, dus ik hoop dat iedereen krijgt iets van een gevoel van wat
R is, wat het is goed voor.
Je zou veel mooier dan plots te maken dit op je eigen tijd, als je wilt.
>> Zodat de buitenlandse functie interface.
Dit is iets dat is niet typisch bedekt met inleidende lezingen
of inleidende iets voor r.
Het is niet waarschijnlijk dat je zult het nodig hebben.
Maar ik vond het nuttig in mijn eigen projecten in het verleden.
En er is geen goed tutorial voor het online.
Dus ik ga gewoon haast u allen door deze
en dan ben je vrij om te vertrekken.
En zo de buitenlandse functie-interface is wat
u kunt gebruiken om te bellen om te zien functies met R. Intern
R is gebouwd op C. R's rekenkunde is gewoon C's 64-bit floating point rekenkunde,
dat is het type dubbel [onverstaanbaar].
En je zou willen doen dit voor een heleboel redenen.
Voor één, is R geïnterpreteerd, het is niet gecompileerd tot aan machine code.
Dus je kunt herschrijven uw innerlijke lussen in C en dan
het voordeel dat R. Like het is een beetje handiger dan C.
Het heeft een betere grafische faciliteiten en wat al niet.
En terwijl het nog steeds in staat om topsnelheid uit de binnenste lussen,
dat is waar je echt nodig hebt.
>> Hergebruik van bestaande C bibliotheken, dat is ook belangrijk.
Als u een aantal C bibliotheek voor als, Ik weet het niet, Fourier-transformaties,
of een zeer Archean statistieken gebruikte procedure
in hoge energie-astrofysica of iets, ik weet het niet.
Hoge energie-astrofysica is niet eens een denk, denk ik.
Maar je kunt dat doen in plaats van het hebben van een inwoner R haven van hen te schrijven.
En the-- en weer, alsof je kijk in de meeste R's standaard bibliotheken,
op de inwendige, de internals gaat naar de buitenlandse functie te gebruiken
de interface zeer uitgebreid.
Ze zullen dingen als Fourier hebben transformeert of het berekenen van de correlatie
coëfficiënten geschreven in C, en ze zullen gewoon R wrappers om hen heen.
De interface is een beetje moeilijk. I denk
de moeilijkheidsgraad is overdreven in een Veel van de instructies die u zult vinden.
Maar toch is het een beetje verwarrend.
En ik heb niet in staat geweest om vinden van een goede tutorial voor het,
dus dit is het nu.
Ook dit hele segment is meer voor latere referentie.
Maak je geen zorgen over het kopiëren alles tot nu.
Dus de volgende instructies zijn voor Unix-achtige systemen,
Linux, BSD, OS X. Ik weet het niet hoe dit werkt op Windows,
maar neem dan gewoon niet doe je afstudeerproject op Windows.
Je echt niet wilt.
Unix is ​​veel beter set up voor casual programmering.
Dus, eigenlijk buitenlandse functie interface.
Als u wilt een C schrijven functie voor gebruik met R,
het moet alle nemen argumenten als pointers.
>> Dus voor enkele waarden, deze betekent dat het gewezen op de waarde.
Voor arrays is dit een pointer het eerste element, waarbij
is wat reeks namen eigenlijk.
Nogmaals, dit is iets wat je moet hebben mooie volledig af na p vijf.
Array namen zijn pointers het eerste element,
Het type floating-point is dubbel.
En uw functie moet leegte terugkeren.
De enige manier waarop het kan eigenlijk te vertellen wat er gebeurd is R
is door het modificeren van het geheugen dat R gaf het door de vreemde functie
interface.
>> Dus ik heb deze schriftelijke Bijvoorbeeld hier, is
een functie die gebruik berekent inwendig product van twee vectoren.
Het duurt twee argumenten, vec1, vec2, die de vectoren zelf,
en n, die een lengte, omdat weer,
R heeft een ingebouwde [onverstaanbaar] om uit te vinden de lengte van vectoren, maar C niet.
In C, vectoren een willekeurige afgebakend deel van het geheugen.
Dus de manier waarop u kunt berekenen dot producten
is alleen deze uiteengezet parameter naar nul en dan doorloopt
van 1 tot n ster, omdat n is een pointer op de lengte
gewoon iets toe te voegen aan dit uit parameter.
En het kan een goede praktijk als je gaat doen
Deze twee afzonderlijke C-functies schrijven.
Eén van hen has-- een van hen gewoon neemt de argumenten en de soorten
dat zij normaal zouden zijn C.
>> Dus het duurt een scala argumenten als pointers.
Maar argumenten single-waarde als n, het duurt slechts als waarden van kopiëren,
zonder pointers.
En dan maakt het niet [Onverstaanbaar] uit pointer.
En dan kun je een andere, in principe,
wrapper functie die in feite handelt de vereisten
van de buitenlandse functie interface voor jou.
>> De manier waarop u deze oproep in R is, zodra u uw functie geschreven in C,
u R cmd shlib folder, R typt commando gedeelde bibliotheek,
foo dot c, of wat dan ook uw bestandsnaam,
en OS shell niet in de R terminal.
En deze zal creëren bibliotheek genaamd foo dot zo.
En dan kun je het laden onze script of interactief
met commando dyn dot belasting.
Dan is er een functie in R genaamd dot c.
>> Dit duurt argumenten die eerst de naam van de functie C
dat u wilt bellen.
En dan alle parameters die functie,
ze moeten in de juiste volgorde.
Je moet dit soort gebruik dwang fungeert als geheel, als
dubbel, zoals karakter, en als logisch.
En toen het geeft de lijst, die weer net
een bijbehorende matrix van de parameter namen en de waarden
nadat de functie is uitgevoerd.
>> Dus in dit geval, want dot prod heeft argumenten vec1, vec2 en int n, n uit.
Dot c we dot prod, de naam van de functie
We noemen, vec1, vec2 type dwingen.
De lengte van één vector, Ik koos gewoon vec1 arbitrair.
Het zou robuuster te s zeggen integer min lengte van vec1, lengte vec2.
Dan net als dubbele nul, omdat we niet echt
schelen wat er in de out parameter omdat we
oprichting ervan toch nul.
>> En dan de resultaten gaan een te zijn grote bijbehorende reeks van in principe
vec1 is wat, vec2 is wat dan ook.
Maar we zijn geïnteresseerd in , dus kunnen we dat uit.
Dit is weer een heel stuk speelgoed voorbeeld van vreemde functie interface.
Maar als je moet dot berekenen producten van massieve vectoren in lussen,
of als u hoeft te doen iets anders in een lus,
en je wilt niet te vertrouwen op R, die wel een beetje overhead
ingebouwd, kan het nuttig zijn.
>> Nogmaals, dit is meestal een inleidende onderwerp R.
Het is niet erg goed gedocumenteerd.
Ik ben gewoon met inbegrip omdat Ik vond het nuttig in het verleden.
Dus, slechte praktijken.
Ik heb gezegd dat er een lus in de functie.
Over het algemeen moet je niet in de taal, niet gebruiken.
Op basis van hoe R implementeert iteratie intern, kan het langzaam zijn.
Ze gewoon kijken ook lelijk.
>> R behandelt vectoren zeer mooi, dus vaak je niet nodig om het te gebruiken.
Dan kan je meestal Vervang vaak een vector
deze functies 'high orde functies, Kaart, verkleinen,
Vinden, of Filter.
Ik geef een aantal voorbeelden van wat deze doet.
Kaart is een hogere orde functie omdat het neemt een functie als argument.
Zodat je het een functie kan geven, je kunt geven een array,
en het zal de functie van toepassing elk element van de array
en de terugkeer van de nieuwe array.
Te verminderen, in principe geef je het een array, geef je
een functie die twee argumenten neemt.
Het zal de functie eerste, de toepassing eerste argument met enkele starter waarde.
Dan om dat resultaat in de tweede.
Dan die in het derde, dan die in het vierde.
En dan terug te keren wanneer het wordt tot het einde.
Dus bijvoorbeeld, als je wilt bereken de som van alle elementen
in een array, dan je zou kunnen noemen verminderen met [onverstaanbaar] verminderen aanvulling
functie, zoals func a, b, terug een plus b.
En dan beginnen een waarde van 0.
>> En al deze, kan je ze vinden in de R worden beschreven
in een leerboek over functioneel programmeren.
Er is ook deze klasse van functies genaamd toepassing functies,
die ik don't-- ze een beetje moeilijk uit te leggen,
maar als je kijkt in de [onverstaanbaar] geboekt die ik aangehaald in het begin,
hij hen vertelt vrij goed in zijn appendix op R programmering.
Meer over praktijken, voegen vectoren.
Ja?
Ik denk dat ik zou moeten corrigeren.
In die eerste lijn, vec pijl, dat de pijl zou er niet zijn.
U kunt toewijzen aan een vector, wederom, door neem de lengte plus 1
en het toewijzen van enige waarde die.
Dat zal de vector uit te breiden, of u kan doen vec gelijken c, vec newValue.
Nogmaals, als je C gebruiken één argument als een vector,
de resulterende hiërarchie wordt afgevlakt.
Dus je zult gewoon een vector dat is uitgebreid met 1.
Dit doet nooit.
>> De reden waarom u niet moet doen is dit.
Wanneer u een vector toe te rekenen, geeft het een bepaald stuk van het geheugen.
Als u te verhogen dat vector formaat, het moet de vector herverdelen
ergens anders.
En dus herverdeling is vrij duur.
Ik zal niet ingaan op de details van hoe gaan geheugen allocators worden geïmplementeerd
op het niveau van het besturingssysteem, maar het kost veel tijd
een nieuw stuk van het geheugen te vinden.
En ook, als je opnieuw toewijzen van veel en veel
van steeds grotere brokken, je uiteindelijk
met iets genaamd geheugen fragmentatie,
waarbij het beschikbare geheugen verdeeld in veel kleine blokken
in het geheugen allocators oogpunt.
En het moeilijker en moeilijker krijgt geheugen voor andere dingen vinden.
Dus in plaats daarvan, als je nodig hebt om dit te doen, indien, je nodig hebt om een ​​vector te groeien van het ene einde
naar de volgende plaats van te voegen constant, moet je pre-wijzen het.
Vec pijl, vector lengte gelijk aan 1000, of wat dan ook.
>> En dan kun je gewoon toewijzen om de vector van waarden één
een keer nadat je het een keer hebt toegewezen.
Ik liep in deze, nogmaals, mijn zomerbaan toen ik aan het schrijven was NRA differentieel
vergelijkingsoplosser.
Niet symbolische numerieke.
Het idee is dat als je eenmaal hebt één waarde voor uw oplossing,
je dat gebruikt om het volgende te berekenen.
Dus mijn natuurlijke naïeve neiging was om te zeggen OK,
dus ik zal beginnen met een vector Dat is een aanzienlijke waarde.
Bereken uit de volgende waarde dat gaat op mijn oplossing vector,
en voegt deze.
>> Iets anders te maken, voegt deze.
Het ging heel, heel langzaam.
En zodra ik dit besefte en ik veranderde mijn systeem
het toevoegen van deze vector als 10.000 tot 100.000 keer,
gewoon pre-toewijzing van een vector en gewoon lopen met dat.
Ik kreeg meer dan 1000-voudige snelheid.
Dus dit is een veel voorkomende val voor R programmering.
Als u nodig hebt om het opbouwen van een vector stuk voor stuk, pre-wijzen het.
>> Een andere veel voorkomende trip up-- dit is mijn laatste glijbaan, niet worry-- is foutafhandeling.
R, om eerlijk te zijn, niet dit is echt zeer goed doen.
Er zijn veel problemen die kunnen opduiken.
Bijvoorbeeld, als je een array te krijgen of een vector uit van een functie
dat je verwacht een enkele werden waarde te komen uit, of vice versa,
en u die overgaan in een functie die Je schreef verwacht een enkele waarde,
dat een probleem kan zijn.
>> Bepaalde functies terug null net als, zeg,
lezen van een onbestaand sleutel in een lijst.
Null, maar is niet zoals C waar als je probeert te lezen
van een oude pointer, [onverstaanbaar] om null pointer, het is gewoon Seg fouten
en als je in je debugger is vertelt je precies waar je bent.
In plaats daarvan, null zal functies doen-- zal onvoorspelbare dingen doen
als ze overhandigd null.
Net als je overhandigd max null, het zal u negatief oneindig geven.
En zo, ja.
En dus dit gebeurde om me een keer toen ik
veranderde een stelletje velden in mijn lijst structuur
keer zonder elders te veranderen toen ik het lezen van hen.
En toen kreeg ik allerlei willekeurige oneindig resultaten opduiken
en ik geen idee waar ze vandaan kwamen.
En helaas, er is geen echte R strikte modus
waar je kunt zeggen als er iets het lijkt alsof het een vergissing zou zijn,
gewoon stoppen daar, dus ik kan gedisciplineerd en bevestig dat.
Er is echter iets noemde stop als niet.
Dit is gelijk aan C's beweren, als je hebt gesproken over dat.
Ik denk niet dat C gelden is een lezing onderwerp,
maar uw sectie leider meer dan het zou zijn gegaan.
En stopt als er geen neemt eigenlijk elke predikaat, zodat een verklaring dat
kunnen waar of onwaar zijn.
En als het valse, stopt het programma.
Het vertelt je precies wat je line waren en wat conditie mislukt.
>> En dit nuttig, bijvoorbeeld, sanity controle, functie-ingangen.
Dus als je een functie en je verwacht, laten we zeggen,
Als je me een datum te geven, ik wil de data zijn slechts een vector van lengte 1
ergens tussen 1 en 31.
En zo niet, ik weet er is iets mis gegaan.
En ik kies om daar te stoppen voordat deze heeft willekeurige klop op effecten met code
dat het moeilijker om door te traceren.
Dus dat is een mogelijke gebruiken stop als niet.
>> Hoe dan ook, op OK.
Dus dat is het einde.
Heel erg bedankt voor uw komst.
Ik ben een rang amateur op dit.
Dus sorry als je je verveelt of verward of wat heb je.
Ik ben blij om vragen per e-mail te nemen bij connorharris@college.harvard.edu.
Dit geldt ook voor iedereen het bekijken van deze live of later.
Ook al ben ik niet een TF, ik ben ook erg
bereid om te dienen als een onofficiële adviseur voor iedereen die
met R in een afstudeerproject.
>> Als u wilt dat, dan gewoon praten met uw TF
en dan schrijf me een e-mail zodat Ik weet wat je mee bezig bent
en zo kan ik opzetten vergadering keer met u als u wilt.
Dus nogmaals, ik dank u zeer.
Ik hoop dat je genoten.
>> PUBLIEK: [onverstaanbaar].
>> CONNER HARRIS: Natuurlijk.
>> Publiek: Wat voor een project zou CS student gebruiken R?
CONNER HARRIS: Dus als je niet doen iets dat louter in data mining,
bijvoorbeeld, en er zijn veel dingen
je zou kunnen doen met die met data mining en machine learning.
Je zou willen gebruiken voor R een onderdeel van iets.
Ik opgevoed, oorspronkelijk, het voorbeeld van als je het schrijven van een website
en u wilt automatisch draaien statistische analyse van uw server
logs op een bepaalde tijd elke dag, dat zou iets dat zijn
zeer gemakkelijk te doen in slechts een korte R script dat je kunt plannen
elke avond werking, bijvoorbeeld.
>> En ik weet zeker dat, als er enige reden waarom je zou
wil statistieken of grafische mogelijkheden en hebben deze run automatisch plaats
van te interageren met de dingen in Excel,
bijvoorbeeld, dat is iets wilt u misschien R gebruiken.
Dus vragen meer voor ik vertrek?
Nee?
Oké, goed, nogmaals, dank u hartelijk voor uw komst.