How to Use lapply, sapply and mapply in R

Поделиться
HTML-код
  • Опубликовано: 22 авг 2024
  • This video shows how to use the lapply, sapply and mapply functions to execute a function on each element of a list or vector in R. The apply family of functions provide a convenient way to quickly invoke a function on each element of vectors without having to write custom for loops.
    Note that since data frames are lists where each column are separate elements of the list, the lapply and sapply will apply a function to each column when run on a data frame. This provides a quick way to create column-based summary statistics.
    Code used in this clip:
    Example of lapply
    data <- mtcars
    Function to apply
    mpg_category <- function(mpg){
    if(mpg > 30){
    return("High")
    } else if (mpg > 20){
    return("Medium")
    }
    return("Low")
    }
    Apply to each element
    lapply(X = data$mpg, FUN = mpg_category)
    Use sapply to simplify the result to a vector or matrix instead of a list
    sapply(X = data$mpg, FUN = mpg_category)
    You can pass additional arguments after FUN
    within_range <- function(mpg, low, high){
    if (mpg >= low & mpg <= high){
    return(TRUE)
    }
    return(FALSE)
    }
    index <- sapply(X = data$mpg, FUN = within_range, low = 15, high = 20)
    index
    data[index,]
    Use mapply to apply a function along multiple vectors at the same time
    Function to apply
    mpg_within_standard_range <- function(mpg, cyl){
    if (cyl == 4){
    return(within_range(mpg, low = 23, high = 31))
    } else if (cyl == 6) {
    return(within_range(mpg, low = 18, high = 23))
    }
    return(within_range(mpg, low = 13, high = 18))
    }
    index <- mapply(FUN = mpg_within_standard_range, mpg = data$mpg, cyl = data$cyl)
    index
    data[!index,]
    When used on a dataframe, lapply and sapply apply a function to each column
    sapply(data, FUN = median)
    * Note: RUclips does not allow greater than or less than symbols in the text description, so the code above will not be exactly the same as the code shown in the video! For R that means I may use = for assignment and the special Unicode large < and > symbols in place of the standard sized ones for dplyr pipes and comparisons. These special symbols should work as expected for R code on Windows, but may need to be replaced with standard greater than and less than symbols for other operating systems.

Комментарии • 48

  • @alfredstiassny4650
    @alfredstiassny4650 4 года назад +13

    Finally a clear explanation if these functions!

  • @smilynohn
    @smilynohn 3 года назад +5

    I think this is the best explanation I have seen about these 3 functions. Practical as well. Thanks a lot!

    • @DataDaft
      @DataDaft  3 года назад +1

      Glad it was useful to you!

  • @designgoat2023
    @designgoat2023 2 месяца назад

    My man thank you SO much for being such an amazing teacher! 🙌

  • @joshroberts5661
    @joshroberts5661 3 года назад +8

    This was explained perfectly! I am officially subscribed. Thank you.

    • @DataDaft
      @DataDaft  3 года назад +2

      Thanks! Glad you found it helpful.

  • @alemarieceria3032
    @alemarieceria3032 Год назад +1

    Awesome! This was super clear, concise and most importantly, helpful! Thank you for this!

  • @jjaa1962
    @jjaa1962 4 года назад +3

    Thank you so much for such a clear and simple presentation!

  • @yaweli2968
    @yaweli2968 10 месяцев назад

    Clearly explained. Thanks

  • @konstantinosmaravegias4198
    @konstantinosmaravegias4198 3 года назад

    Thank you. Plain and simple explanation.

  • @mky1920
    @mky1920 2 года назад

    well explained. thank you

  • @jhilamsinha6217
    @jhilamsinha6217 4 года назад +2

    Great video !! very simple and effective..

  • @rogerwilcoshirley2270
    @rogerwilcoshirley2270 4 года назад +1

    Nicely done ✅, very useful esp the mapply explanations.

  • @aronsantacruz4239
    @aronsantacruz4239 3 года назад

    Thanks! Greetings from Peru.

  • @harryporter2099
    @harryporter2099 3 года назад +2

    Thank you Sir!

  • @wilsonjp23
    @wilsonjp23 Год назад

    Dude ty this exactly what I needed.

  • @TongPax
    @TongPax 3 года назад

    Clear explanation. Nice.

  • @larissacury7714
    @larissacury7714 2 года назад

    Thank you!

  • @niceday2015
    @niceday2015 Год назад

    Thank you very much

  • @1961Lobo1961
    @1961Lobo1961 2 года назад

    Very well explained Thank you very much

  • @pipertripp
    @pipertripp 2 года назад

    very handy. Thanks for putting it together!

  • @multitaskprueba1
    @multitaskprueba1 2 года назад

    Fantastic video! Thank you! You are a genius!

  • @ciantuohy4381
    @ciantuohy4381 3 года назад +1

    Thank you so much! This is great!

    • @DataDaft
      @DataDaft  3 года назад

      Glad it was helpful!

  • @xyzphd122
    @xyzphd122 Год назад +1

    my lapply does not return it as 1. 2. 3. ... but with [[#]]... could you explain how you were able to set it to return in that format? for lapply? TY

  • @javierlopezbahon
    @javierlopezbahon 3 года назад +1

    Thank you!!!

  • @octavius654321
    @octavius654321 3 года назад

    Thank you so much for the explanation

  • @Ms-RAZ
    @Ms-RAZ 3 года назад

    God bless you. Thank you!

  • @chuckbecker4983
    @chuckbecker4983 2 года назад +1

    Okay, so I'm hung up on a trivial formatting thing, but when I run lapply my output includes all of the list indexes and looks nothing like the neatly serial numbered output at 1:50. My output:
    > lapply( X = data$mpg, FUN = mpg_func )
    [[1]]
    [1] "Medium"
    [[2]]
    [1] "Medium"
    [[3]]
    [1] "Medium"
    [[4]]
    [1] "Medium"
    [[5]]
    [1] "Low"
    Any help greatly appreciated!

    • @urjitaswar6661
      @urjitaswar6661 Год назад +1

      Yeah, am facing the same issue.. also my sapply function is returning list() as an output (like an empty list) instead of the supposed output..

  • @joelkosianza7694
    @joelkosianza7694 3 года назад

    Thanks for this amazing video

  • @kartikeyasharma9908
    @kartikeyasharma9908 4 года назад +1

    Hey, thanks for uploading such an amazing video.

  • @meditationandrelaxation7460
    @meditationandrelaxation7460 3 года назад

    Amazing tutorial

  • @scottparrish7244
    @scottparrish7244 3 года назад

    Awesome. I really needed to see this video.

  • @vincenzo4259
    @vincenzo4259 2 года назад

    Thanks

  • @totochandelier
    @totochandelier 4 года назад +1

    thx !

  • @skyscraper5910
    @skyscraper5910 3 года назад

    Another maybe idea, if you showed what would happen if you tried to use lapply instead of mapply in the mapply example

  • @skyscraper5910
    @skyscraper5910 3 года назад

    Would be helpful if the within_range function was still shown in the corner while showing the pithing_standard_range_funciton. otherwise, great stuff

  • @reubenjake8573
    @reubenjake8573 4 года назад

    What does the small x argument in lapply() do?

  • @homataha5626
    @homataha5626 3 года назад

    what about the apply function? I am a little confused about when to use apply and when to use lappy?

  • @jimaroddrigo7679
    @jimaroddrigo7679 4 года назад

    Dear sir, Could you please help me with my question?. I have to create data for an empty matrix and matrix size is big as ex. 450×450 . I used for loop but it takes longtime like more than 24 hrs since there are many functions are running inside the for loop for creating elements . So I heard we can use apply() function instead of for loop so could you please let me know that can we use apply() function to empty matrix . I have clear idea to use apply() non empty matrix but do not know how to fill a matrix using apply () ...

    • @DataDaft
      @DataDaft  4 года назад

      It is difficult to answer such a question without knowing the details of what you are trying to do and how you are creating/populating data. You could start with a matrix of the desired size filled with NA and then use apply to generate columns of values by passing in a custom function that creates vectors that are the same length as your columns. Something like:
      empty

  • @Orange-xw4lt
    @Orange-xw4lt 4 года назад

    Hi, If I have a wave how can I take and separate the values ​​of the crests starting from a certain threshold?

    • @DataDaft
      @DataDaft  4 года назад +1

      Depends on how the data is stored, but if it is in a single vector you could use data[ data > threshold ] to get the values above a certain threshold.

    • @Orange-xw4lt
      @Orange-xw4lt 4 года назад

      @@DataDaft the problem is to separate the values of the crests as individual intervals and calculate the average.

  • @khaibaromari8178
    @khaibaromari8178 3 года назад

    I was wondering which IDE is he using? is it jupyter for R lol

    • @DataDaft
      @DataDaft  3 года назад

      I'm using the Kaggle Notebook environment, which is a basically an R Jupyter notebook. You can sign up for an account on Kaggle and make a new R notebook if you want to replicate this environment. It isn't really the best in terms of an IDE, it is just convenient because it allows for public sharing of code and anyone wants to can use it and should get the same results as what is shown in the videos.

  • @shalinisarathy3002
    @shalinisarathy3002 3 года назад

    very nice explanation. Thank you.