SlideShare a Scribd company logo
plyr
                         Wrap up


                       Hadley Wickham
Tuesday, 7 July 2009
1. Fitting multiple models to the same
                   data
                2. Reporting progress & dealing with
                   errors
                3. Overall structure & correspondence to
                   base R functions
                4. Plans
                5. Feedback

Tuesday, 7 July 2009
Multiple models
                       May need to fit multiple models to the
                       same data, with varying parameters or
                       many random starts.
                       Two plyr functions make this easy: rlply
                       & mlply
                       Example: fitting a neural network



Tuesday, 7 July 2009
1.0                                                                                                                                                                                         ●

                                                                                                                                                      ●                                                        ●
                                                                                                                              ●                                           ●
                                                                                                                                      ●                                           ●                    ●
                                                                                                                                                                      ●
                                                                                                                      ●                           ●       ●                                        ●
                                                                                                  ●                                                                   ●                        ●                   ●
                                                                                          ●               ●                                                                                        ●
                                                                                                                                                  ●                               ●           ●            ●
                                                                      ●                       ●                                   ●       ●                                                   ●
                                                                                                          ●               ●                                   ●                   ●
                           0.8                                                                    ●                                               ●
                                                                                      ●               ●               ●               ●                               ●               ●                            ●
                                                                  ●                                                                                                                                        ●
                                                                       ●                                                      ●                                   ●           ●           ●●
                                                                                       ●                                                                  ●                                            ●
                                                                                                                                          ●
                                                                                                                  ●           ●                   ●
                                                          ●                   ●                   ●
                                                                                                                                              ●           ●                                                    ●
                                                                                      ●                   ●                                                           ●       ●           ●
                                                                                                                          ●           ●                                                                    ●
                                                 ●                                                                                                                                             ●
                                                                      ●                       ●                                                                   ● ●
                                     ●                                ●●                                                  ●                       ● ●                                 ●
                           0.6                                                    ●                                                       ●
                                                              ●            ●                          ●           ●           ●                   ●
                                                                                                                      ●                                       ●                   ●            ●
                                                     ●                 ●                                                          ●                               ●
                                                                                       ●                      ●                           ●
                                                              ●                                                                                                                           ●
                                                                                              ●       ●                                       ●                                   ●                                        class
                                                                               ●                              ●               ●                               ●
                                                     ●                                                                                ●                                                                                     ●   A
                       y




                                                                               ●          ●               ●       ●                                       ●●                  ●
                                                  ●               ●                                                                                                                       ●
                                                                                                  ●                           ●       ● ●                                                                                   ●   B
                                                 ● ●                      ●                                                                                               ●
                                                                                                                                                                                  ●
                           0.4                                                        ●                   ●       ●
                                                                                                          ●                                   ●                               ●
                                             ●            ●                                                                           ●                   ●
                                                          ●                                                               ●
                                  ●                                                   ●                                           ●                                       ●
                                                                       ●                                      ●
                                                                                                                                                  ●       ●
                                         ●                                                                                        ●
                                                              ●            ●                                                  ●       ●                                           ●
                                 ●               ●                                                                ●                                                   ●
                                                 ●
                                                 ●
                                                                                                                                              ●                                   ●
                                                                   ●               ●                              ●           ●       ●               ●
                           0.2                                ●
                                                                                              ● ●                                                             ●
                                         ●                                     ●                                          ●
                                                                                          ●
                                                     ●●                                           ●               ●                       ●
                                  ●                                    ●
                                                                  ●                ●
                                                          ●                                               ●               ●       ●
                                             ●                                            ●
                                                              ●        ●
                                                     ●                                                        ●
                                         ●                ●                   ●               ●

                           0.0                                     ●



                                 0.0                              0.2                                 0.4                                 0.6                                     0.8                              1.0
                                                                                                                      x
Tuesday, 7 July 2009
library(nnet)
      library(ggplot2)

      w <- read.csv("wiggly.csv")
      qplot(x, y, data = w, colour = class)

      accuracy <- function(mod, true) {
        pred <- factor(predict(mod, type = "class"),
          levels = levels(true))
        tb <- table(pred, true)
        sum(diag(tb)) / sum(tb)
      }

      nnet(class ~ x + y, data = w, size = 3)

Tuesday, 7 July 2009
rlply

                       A little different to the other plyr functions:
                       first argument is number of times to run,
                       second argument is an expression (not a
                       function).
                       Automatically adds run number (.n) to
                       labels.



Tuesday, 7 July 2009
models <- rlply(50, nnet(class ~ x + y, data = w,
      size = 3, trace = FALSE))

      accdf <- ldply(models, "accuracy", true = w$class)
      accdf
      qplot(accuracy, data = accdf, binwith = 0.02)




Tuesday, 7 July 2009
mlply
                       What if we want to systematically vary the
                       input parameters?
                       mlply allows us to vary all of the
                       arguments to the applicator function, not
                       just the first argument
                       Input is a data frame of parameter values



Tuesday, 7 July 2009
wiggly_nnet <- function(...) {
        nnet(class ~ x + y, data = w, trace = FALSE, ...)
      }
      rlply(5, wiggly_nnet(size = 3))

      # Unfortunately need 2+ parameters because of bug
      opts <- data.frame(size = 1:10, maxiter = 50)
      opts

      models <- mlply(opts, wiggly_nnet)
      ldply(models, "accuracy", true = w$class)

      # expand.grid() useful if you want to explore
      # all combinations

Tuesday, 7 July 2009
Progress & errors



Tuesday, 7 July 2009
Progress bars
                       Things seem to take much less time when
                       you are regularly updated on their
                       progress.
                       Plyr provides convenient method for
                       doing this: all arguments
                       accept .progress = "text" argument




Tuesday, 7 July 2009
Error handling
                       Helper function: failwith
                       Takes a function as an input and returns a
                       function as output, but instead of
                       throwing an error it will return the value
                       you specify.
                       failwith(NULL, lm)(cty ~ displ, data = mpg)
                       failwith(NULL, lm)(cty ~ displ, data = NULL)



Tuesday, 7 July 2009
Overall structure



Tuesday, 7 July 2009
array   data frame    list   nothing

             array     aaply     adply      alply    a_ply

      data frame       daply     ddply      dlply   d_ply

                list   laply     ldply      llply    l_ply

     n replicates      raply     rdply      rlply    r_ply

       function
                       maply     mdply      mlply   m_ply
      arguments

Tuesday, 7 July 2009
No output

                       Useful for functions called purely for their
                       side effects: write.table, save, graphics.
                       If .print = TRUE will print each result
                       (particularly useful lattice and ggplot2 graphics)




Tuesday, 7 July 2009
Your turn

                       With your partner, using your collective R
                       knowledge, come up with all of the
                       functions in base R (or contributed
                       packages) that do the same thing.




Tuesday, 7 July 2009
array      data frame      list     nothing

             array      apply        adply        alply      a_ply

      data frame        daply      aggregate       by       d_ply

                list    sapply       ldply       lapply      l_ply

     n replicates      replicate     rdply      replicate    r_ply

       function
                       mapply        mdply      mapply      m_ply
      arguments

Tuesday, 7 July 2009
Plans

                       Deal better with large and larger data:
                       trivial parallelisation & on-disk data (sql
                       etc)
                       Stay tuned for details.




Tuesday, 7 July 2009
http://hadley.wufoo.com/
                 forms/course-evaluation/



Tuesday, 7 July 2009

More Related Content

Similar to 04 Wrapup

Los Angeles R users group - July 12 2011 - Part 1
Los Angeles R users group - July 12 2011 - Part 1Los Angeles R users group - July 12 2011 - Part 1
Los Angeles R users group - July 12 2011 - Part 1rusersla
 
Over Visie, Missie En Strategie
Over Visie, Missie En StrategieOver Visie, Missie En Strategie
Over Visie, Missie En StrategieGuus Vos
 
About Vision, Mission And Strategy
About Vision, Mission And StrategyAbout Vision, Mission And Strategy
About Vision, Mission And StrategyGuus Vos
 
How People Use Facebook -- And Why It Matters
How People Use Facebook -- And Why It MattersHow People Use Facebook -- And Why It Matters
How People Use Facebook -- And Why It Matters
Mat Morrison
 
研修企画書11 12term voda-カヤック
研修企画書11 12term voda-カヤック研修企画書11 12term voda-カヤック
研修企画書11 12term voda-カヤックaiesecsfc_icx2011
 
研修企画書11-12term voda-カヤック
研修企画書11-12term voda-カヤック研修企画書11-12term voda-カヤック
研修企画書11-12term voda-カヤックaiesecsfc_icx2011
 
Modul mulus bahagian c sjk (modul murid)
Modul mulus bahagian c sjk (modul murid)Modul mulus bahagian c sjk (modul murid)
Modul mulus bahagian c sjk (modul murid)
Anparasu
 
Modul mulus bahagian c sjk (modul guru)
Modul mulus bahagian c sjk (modul guru)Modul mulus bahagian c sjk (modul guru)
Modul mulus bahagian c sjk (modul guru)
Anparasu
 
Modul mulus bahagian c sk (modul murid)
Modul mulus bahagian c sk (modul murid)Modul mulus bahagian c sk (modul murid)
Modul mulus bahagian c sk (modul murid)
Anparasu
 
Modul mulus bahagian c sk (modul guru)
Modul mulus bahagian c sk (modul guru)Modul mulus bahagian c sk (modul guru)
Modul mulus bahagian c sk (modul guru)
Anparasu
 
The ecological and evolutionary impacts of altered
The ecological and evolutionary impacts of alteredThe ecological and evolutionary impacts of altered
The ecological and evolutionary impacts of altered
DistribEcology
 
正誤表 p39
正誤表 p39正誤表 p39
正誤表 p39zafiro555
 

Similar to 04 Wrapup (20)

02 large
02 large02 large
02 large
 
02 Large
02 Large02 Large
02 Large
 
Los Angeles R users group - July 12 2011 - Part 1
Los Angeles R users group - July 12 2011 - Part 1Los Angeles R users group - July 12 2011 - Part 1
Los Angeles R users group - July 12 2011 - Part 1
 
08 Continuous
08 Continuous08 Continuous
08 Continuous
 
08 Continuous
08 Continuous08 Continuous
08 Continuous
 
Over Visie, Missie En Strategie
Over Visie, Missie En StrategieOver Visie, Missie En Strategie
Over Visie, Missie En Strategie
 
About Vision, Mission And Strategy
About Vision, Mission And StrategyAbout Vision, Mission And Strategy
About Vision, Mission And Strategy
 
13 Bivariate
13 Bivariate13 Bivariate
13 Bivariate
 
21 Ml
21 Ml21 Ml
21 Ml
 
How People Use Facebook -- And Why It Matters
How People Use Facebook -- And Why It MattersHow People Use Facebook -- And Why It Matters
How People Use Facebook -- And Why It Matters
 
研修企画書11 12term voda-カヤック
研修企画書11 12term voda-カヤック研修企画書11 12term voda-カヤック
研修企画書11 12term voda-カヤック
 
01 intro
01 intro01 intro
01 intro
 
研修企画書11-12term voda-カヤック
研修企画書11-12term voda-カヤック研修企画書11-12term voda-カヤック
研修企画書11-12term voda-カヤック
 
Modul mulus bahagian c sjk (modul murid)
Modul mulus bahagian c sjk (modul murid)Modul mulus bahagian c sjk (modul murid)
Modul mulus bahagian c sjk (modul murid)
 
Modul mulus bahagian c sjk (modul guru)
Modul mulus bahagian c sjk (modul guru)Modul mulus bahagian c sjk (modul guru)
Modul mulus bahagian c sjk (modul guru)
 
17 Sampling Dist
17 Sampling Dist17 Sampling Dist
17 Sampling Dist
 
Modul mulus bahagian c sk (modul murid)
Modul mulus bahagian c sk (modul murid)Modul mulus bahagian c sk (modul murid)
Modul mulus bahagian c sk (modul murid)
 
Modul mulus bahagian c sk (modul guru)
Modul mulus bahagian c sk (modul guru)Modul mulus bahagian c sk (modul guru)
Modul mulus bahagian c sk (modul guru)
 
The ecological and evolutionary impacts of altered
The ecological and evolutionary impacts of alteredThe ecological and evolutionary impacts of altered
The ecological and evolutionary impacts of altered
 
正誤表 p39
正誤表 p39正誤表 p39
正誤表 p39
 

More from Hadley Wickham (20)

27 development
27 development27 development
27 development
 
27 development
27 development27 development
27 development
 
24 modelling
24 modelling24 modelling
24 modelling
 
23 data-structures
23 data-structures23 data-structures
23 data-structures
 
Graphical inference
Graphical inferenceGraphical inference
Graphical inference
 
R packages
R packagesR packages
R packages
 
22 spam
22 spam22 spam
22 spam
 
21 spam
21 spam21 spam
21 spam
 
20 date-times
20 date-times20 date-times
20 date-times
 
19 tables
19 tables19 tables
19 tables
 
18 cleaning
18 cleaning18 cleaning
18 cleaning
 
16 critique
16 critique16 critique
16 critique
 
15 time-space
15 time-space15 time-space
15 time-space
 
13 case-study
13 case-study13 case-study
13 case-study
 
12 adv-manip
12 adv-manip12 adv-manip
12 adv-manip
 
11 adv-manip
11 adv-manip11 adv-manip
11 adv-manip
 
11 adv-manip
11 adv-manip11 adv-manip
11 adv-manip
 
10 simulation
10 simulation10 simulation
10 simulation
 
10 simulation
10 simulation10 simulation
10 simulation
 
09 bootstrapping
09 bootstrapping09 bootstrapping
09 bootstrapping
 

Recently uploaded

A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 

Recently uploaded (20)

A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 

04 Wrapup

  • 1. plyr Wrap up Hadley Wickham Tuesday, 7 July 2009
  • 2. 1. Fitting multiple models to the same data 2. Reporting progress & dealing with errors 3. Overall structure & correspondence to base R functions 4. Plans 5. Feedback Tuesday, 7 July 2009
  • 3. Multiple models May need to fit multiple models to the same data, with varying parameters or many random starts. Two plyr functions make this easy: rlply & mlply Example: fitting a neural network Tuesday, 7 July 2009
  • 4. 1.0 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0.8 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● 0.6 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● class ● ● ● ● ● ● ● A y ● ● ● ● ●● ● ● ● ● ● ● ● ● ● B ● ● ● ● ● 0.4 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0.2 ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0.0 ● 0.0 0.2 0.4 0.6 0.8 1.0 x Tuesday, 7 July 2009
  • 5. library(nnet) library(ggplot2) w <- read.csv("wiggly.csv") qplot(x, y, data = w, colour = class) accuracy <- function(mod, true) { pred <- factor(predict(mod, type = "class"), levels = levels(true)) tb <- table(pred, true) sum(diag(tb)) / sum(tb) } nnet(class ~ x + y, data = w, size = 3) Tuesday, 7 July 2009
  • 6. rlply A little different to the other plyr functions: first argument is number of times to run, second argument is an expression (not a function). Automatically adds run number (.n) to labels. Tuesday, 7 July 2009
  • 7. models <- rlply(50, nnet(class ~ x + y, data = w, size = 3, trace = FALSE)) accdf <- ldply(models, "accuracy", true = w$class) accdf qplot(accuracy, data = accdf, binwith = 0.02) Tuesday, 7 July 2009
  • 8. mlply What if we want to systematically vary the input parameters? mlply allows us to vary all of the arguments to the applicator function, not just the first argument Input is a data frame of parameter values Tuesday, 7 July 2009
  • 9. wiggly_nnet <- function(...) { nnet(class ~ x + y, data = w, trace = FALSE, ...) } rlply(5, wiggly_nnet(size = 3)) # Unfortunately need 2+ parameters because of bug opts <- data.frame(size = 1:10, maxiter = 50) opts models <- mlply(opts, wiggly_nnet) ldply(models, "accuracy", true = w$class) # expand.grid() useful if you want to explore # all combinations Tuesday, 7 July 2009
  • 11. Progress bars Things seem to take much less time when you are regularly updated on their progress. Plyr provides convenient method for doing this: all arguments accept .progress = "text" argument Tuesday, 7 July 2009
  • 12. Error handling Helper function: failwith Takes a function as an input and returns a function as output, but instead of throwing an error it will return the value you specify. failwith(NULL, lm)(cty ~ displ, data = mpg) failwith(NULL, lm)(cty ~ displ, data = NULL) Tuesday, 7 July 2009
  • 14. array data frame list nothing array aaply adply alply a_ply data frame daply ddply dlply d_ply list laply ldply llply l_ply n replicates raply rdply rlply r_ply function maply mdply mlply m_ply arguments Tuesday, 7 July 2009
  • 15. No output Useful for functions called purely for their side effects: write.table, save, graphics. If .print = TRUE will print each result (particularly useful lattice and ggplot2 graphics) Tuesday, 7 July 2009
  • 16. Your turn With your partner, using your collective R knowledge, come up with all of the functions in base R (or contributed packages) that do the same thing. Tuesday, 7 July 2009
  • 17. array data frame list nothing array apply adply alply a_ply data frame daply aggregate by d_ply list sapply ldply lapply l_ply n replicates replicate rdply replicate r_ply function mapply mdply mapply m_ply arguments Tuesday, 7 July 2009
  • 18. Plans Deal better with large and larger data: trivial parallelisation & on-disk data (sql etc) Stay tuned for details. Tuesday, 7 July 2009
  • 19. http://hadley.wufoo.com/ forms/course-evaluation/ Tuesday, 7 July 2009