--- title: "Underrated Tidyverse Functions" author: "Ted Laderas" date: "12/1/2020" output: html_document: toc: true toc_float: true ---
I’m teaching an R Programming course next term. Jessica Minnier and I are developing the Ready for R Materials into a longer and more involved course.
I think one of the most important things is to teach people how to self-learn. As learning to program is a lifelong learning activity, it’s critically important to give them these meta-learning skills. So that’s the motivation behind the Tidyverse function of the Week assignment.
I asked on Twitter:
Hi Everyone. I'm teaching an #rstats course next quarter.
— Ted Laderas, PhD 🏳🌈 (@tladeras) November 30, 2020
One assignment is to have each student write about a #tidyverse function. What it's for and an example.
What are some less known #tidyverse functions that do a job you find useful?
Here are some of the highlights from the thread.
I loved all of these. Danielle Quinn wins the MVP award for naming so many useful functions:
dplyr::uncount()
— Danielle Quinn (she/her) (@daniellequinn88) December 1, 2020
tidyr::complete()
tidyr::fill() / replace_na()
stringr::str_detect() / str_which()
lubridate::ymd_hms() and related functions
ggplot2::labs() - so simple, yet under appreciated!
fill()
was highly suggested:
tidyr::fill() - extremely useful when creating a usable dataset out of a spreadsheet originally built for data entry, in which redundant informations are only reported once at the beginning of the group they refer to, rather than in every row as needed for the analysis.
— Luca Foppoli (@foppoli_luca) December 1, 2020
Many people suggested the window functions, including lead()
and lag()
and the cumulative functions:
Check out the dplyr window functions, cummin, cummax, cumany and cumall. They don't seen useful at first but they can solve really tricky aggregation problems. https://t.co/aDpXqSB2Vx
— Robert Kubinec (@rmkubinec) December 1, 2020
Alison Hill suggested problems()
, which helps you diagnose why your data isn’t loading:
Ooh problems is a good function for importing rx https://t.co/P4ZR57PgOG
— Alison Presmanes Hill (@apreshill) December 1, 2020
I think that deframe()
and enframe()
are really exciting, since I do this operation all the time:
tibble::deframe(), tibble::deframe()
— E. David Aja (@PeeltothePithy) December 1, 2020
coercing a two-column df to named vector, which I prefer immensely to names(df) <- vec_of_names
unite()
, separate()
and separate_rows()
also had their own contingent:
I find myself using tidyr::unite() a lot to clean messy data - particularly useful for making unique and informative ID's for each row. coalesce() and fill() are also little known gems! :)
— Guy Sutton🐝🌾🇿🇦🇿🇼 (@Guy_F_Sutton) December 1, 2020
I was bowled over by all of the replies. This was an unexpectedly really fun thread, and lots of recommendations from others.
I thought I would try and summarize everyone’s suggestions and compile a list of recommended functions. I used this script with some modifications to pull all the replies to my tweet. In particular, I had to request for extended
tweet mode, and I extracted a few more fields from the returned JSON.
This wrote the tweet information into a CSV file.
Then I started parsing the data. I wrote a couple of functions, remove_users_from_text()
, which removes the users from a tweet (by looking for words that begin with @
) and get_funcs()
, which uses a relatively simple regular expression to try to return the function (it looks for paired parentheses ()
or an underscore “-” to extract the functions). It actually works pretty well, and grabs most of the functions.
Then I use separate_rows()
to split the multiple functions into their separate rows. This makes it easier to tally all the functions.
remove_users_from_text <- function(col){
str_replace_all(col, "\\@\\w*", "")
}
get_funcs <- function(col){
out <- str_extract_all(col, "\\w*\\(\\)|\\w*_\\w*")
paste(out[[1]], collapse=", ")
}
parsed_tweets <- tweets %>%
rowwise() %>%
mutate(text = remove_users_from_text(text)) %>%
mutate(funcs = get_funcs(text)) %>%
ungroup() %>%
separate_rows(funcs, sep=", ") %>%
select(date, user, funcs, text, reply, parent_thread) %>%
distinct()
write_csv(parsed_tweets, file = "cleaned_tweets_incomplete.csv")
knitr::kable(parsed_tweets[1:10,-c(5:6)])
| date | user | funcs | text |
|---|---|---|---|
| 02/12/2020 16:12:48 | NathanKhadaroo | expand_grid() | tidyr::expand_grid() is really useful for creating new datasets to see how fitted models perform on new data! |
| 02/12/2020 06:43:45 | sleepydatum | anti_join() | dplyr::anti_join() is my personal favorite. |
| 02/12/2020 01:19:24 | dragonflystats | out of curiosity - who are the students? CS? Health Science? | |
| 02/12/2020 01:22:25 | tladeras | Biostatistics students. | |
| 01/12/2020 19:15:14 | eulerdiditfirst | Writing your own tidy verse functions from chaining tidy verse functions using {{}} . Seriously feels like a super power sometimes | |
| 01/12/2020 18:34:13 | pedro_tfonseca | dplyr::near is one of my favorite | |
| 01/12/2020 18:28:52 | daniellequinn88 | uncount() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 01/12/2020 18:28:52 | daniellequinn88 | complete() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 01/12/2020 18:28:52 | daniellequinn88 | fill() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 01/12/2020 18:28:52 | daniellequinn88 | replace_na() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
At this point, I realized that I just needed to hand annotate the rest of the tweets, rather than wasting my time trying to parse the rest of the cases. So I pulled everything into Excel and just annotated the ones which I couldn’t pull from.
Here are the function suggestions by frequency. Unsurprisingly, case_when()
(which I cover in the main course), has the most number of suggestions, because it’s so useful. tidyr::pivot_wider()
and tidyr::pivot_longer()
are also covered in the course.
There are some others which were new to me, and a bit of a surprise, such as coalesce()
, fill()
.
cleaned_tweets <- read_csv("cleaned_tweets.csv") %>% select(-parent_thread) %>%
mutate(user = paste0("[",user,"](",reply,")")) %>%
select(-reply)
##
## -- Column specification --------------------------------------------------------
## cols(
## date = col_character(),
## user = col_character(),
## funcs = col_character(),
## text = col_character(),
## reply = col_character(),
## parent_thread = col_character()
## )
functions_by_freq <- cleaned_tweets %>%
janitor::tabyl(funcs) %>%
filter(!is.na(funcs)) %>%
arrange(desc(n))
write_csv(functions_by_freq, "functions_by_frequency.csv")
functions_by_freq %>%
knitr::kable()
| funcs | n | percent | valid_percent |
|---|---|---|---|
| case_when() | 16 | 0.0601504 | 0.0720721 |
| pivot_longer() | 7 | 0.0263158 | 0.0315315 |
| pivot_wider() | 6 | 0.0225564 | 0.0270270 |
| coalesce() | 5 | 0.0187970 | 0.0225225 |
| fill() | 5 | 0.0187970 | 0.0225225 |
| across() | 4 | 0.0150376 | 0.0180180 |
| lag() | 4 | 0.0150376 | 0.0180180 |
| separate() | 4 | 0.0150376 | 0.0180180 |
| separate_rows() | 4 | 0.0150376 | 0.0180180 |
| str_detect() | 4 | 0.0150376 | 0.0180180 |
| uncount() | 4 | 0.0150376 | 0.0180180 |
| anti_join() | 3 | 0.0112782 | 0.0135135 |
| complete() | 3 | 0.0112782 | 0.0135135 |
| fct_reorder() | 3 | 0.0112782 | 0.0135135 |
| lead() | 3 | 0.0112782 | 0.0135135 |
| map() | 3 | 0.0112782 | 0.0135135 |
| recode() | 3 | 0.0112782 | 0.0135135 |
| replace_na() | 3 | 0.0112782 | 0.0135135 |
| slice() | 3 | 0.0112782 | 0.0135135 |
| str_wrap() | 3 | 0.0112782 | 0.0135135 |
| {forcats} | 2 | 0.0075188 | 0.0090090 |
| {tidyeval} | 2 | 0.0075188 | 0.0090090 |
| add_count() | 2 | 0.0075188 | 0.0090090 |
| between() | 2 | 0.0075188 | 0.0090090 |
| breaks_pretty() | 2 | 0.0075188 | 0.0090090 |
| distinct() | 2 | 0.0075188 | 0.0090090 |
| enframe() | 2 | 0.0075188 | 0.0090090 |
| fct_infreq() | 2 | 0.0075188 | 0.0090090 |
| floor_date() | 2 | 0.0075188 | 0.0090090 |
| gather() | 2 | 0.0075188 | 0.0090090 |
| group_indices() | 2 | 0.0075188 | 0.0090090 |
| group_map() | 2 | 0.0075188 | 0.0090090 |
| left_join() | 2 | 0.0075188 | 0.0090090 |
| mutate() | 2 | 0.0075188 | 0.0090090 |
| n_distinct() | 2 | 0.0075188 | 0.0090090 |
| nest() | 2 | 0.0075188 | 0.0090090 |
| partial() | 2 | 0.0075188 | 0.0090090 |
| pluck() | 2 | 0.0075188 | 0.0090090 |
| pull() | 2 | 0.0075188 | 0.0090090 |
| safely() | 2 | 0.0075188 | 0.0090090 |
| tabyl() | 2 | 0.0075188 | 0.0090090 |
| unite() | 2 | 0.0075188 | 0.0090090 |
| unnest() | 2 | 0.0075188 | 0.0090090 |
| walk() | 2 | 0.0075188 | 0.0090090 |
| *_join() | 1 | 0.0037594 | 0.0045045 |
| {janitor} | 1 | 0.0037594 | 0.0045045 |
| {readr} | 1 | 0.0037594 | 0.0045045 |
| {tsibble} | 1 | 0.0037594 | 0.0045045 |
| add_predictions() | 1 | 0.0037594 | 0.0045045 |
| arrange() | 1 | 0.0037594 | 0.0045045 |
| as_mapper() | 1 | 0.0037594 | 0.0045045 |
| ceiling_date() | 1 | 0.0037594 | 0.0045045 |
| count() | 1 | 0.0037594 | 0.0045045 |
| crossing() | 1 | 0.0037594 | 0.0045045 |
| cut_interval() | 1 | 0.0037594 | 0.0045045 |
| cut_number () | 1 | 0.0037594 | 0.0045045 |
| cut_width() | 1 | 0.0037594 | 0.0045045 |
| deframe() | 1 | 0.0037594 | 0.0045045 |
| dense_rank() | 1 | 0.0037594 | 0.0045045 |
| dplyr::first() | 1 | 0.0037594 | 0.0045045 |
| dplyr::last() | 1 | 0.0037594 | 0.0045045 |
| drop_na() | 1 | 0.0037594 | 0.0045045 |
| every() | 1 | 0.0037594 | 0.0045045 |
| expand_grid() | 1 | 0.0037594 | 0.0045045 |
| fct_explicit_na() | 1 | 0.0037594 | 0.0045045 |
| fct_inorder() | 1 | 0.0037594 | 0.0045045 |
| fct_relevel() | 1 | 0.0037594 | 0.0045045 |
| filter() | 1 | 0.0037594 | 0.0045045 |
| first() | 1 | 0.0037594 | 0.0045045 |
| force_tz() | 1 | 0.0037594 | 0.0045045 |
| geom_count() | 1 | 0.0037594 | 0.0045045 |
| glimpse() | 1 | 0.0037594 | 0.0045045 |
| grepl() | 1 | 0.0037594 | 0.0045045 |
| group_*() | 1 | 0.0037594 | 0.0045045 |
| group_by() | 1 | 0.0037594 | 0.0045045 |
| group_walk() | 1 | 0.0037594 | 0.0045045 |
| hoist() | 1 | 0.0037594 | 0.0045045 |
| if() | 1 | 0.0037594 | 0.0045045 |
| if_else() | 1 | 0.0037594 | 0.0045045 |
| janitor::clean_names() | 1 | 0.0037594 | 0.0045045 |
| keep_all() | 1 | 0.0037594 | 0.0045045 |
| labs() | 1 | 0.0037594 | 0.0045045 |
| last() | 1 | 0.0037594 | 0.0045045 |
| left_join | 1 | 0.0037594 | 0.0045045 |
| make_valid() | 1 | 0.0037594 | 0.0045045 |
| map_*() | 1 | 0.0037594 | 0.0045045 |
| map_dfr() | 1 | 0.0037594 | 0.0045045 |
| mutate_at() | 1 | 0.0037594 | 0.0045045 |
| mutate_if() | 1 | 0.0037594 | 0.0045045 |
| n() | 1 | 0.0037594 | 0.0045045 |
| n_tile() | 1 | 0.0037594 | 0.0045045 |
| na_if() | 1 | 0.0037594 | 0.0045045 |
| near() | 1 | 0.0037594 | 0.0045045 |
| nest_by() | 1 | 0.0037594 | 0.0045045 |
| none() | 1 | 0.0037594 | 0.0045045 |
| nth() | 1 | 0.0037594 | 0.0045045 |
| ntile() | 1 | 0.0037594 | 0.0045045 |
| parse_*() | 1 | 0.0037594 | 0.0045045 |
| parse_date_time() | 1 | 0.0037594 | 0.0045045 |
| paste() | 1 | 0.0037594 | 0.0045045 |
| possibly() | 1 | 0.0037594 | 0.0045045 |
| problems() | 1 | 0.0037594 | 0.0045045 |
| read_csv() | 1 | 0.0037594 | 0.0045045 |
| read_delim() | 1 | 0.0037594 | 0.0045045 |
| reduce() | 1 | 0.0037594 | 0.0045045 |
| relocate() | 1 | 0.0037594 | 0.0045045 |
| select() | 1 | 0.0037594 | 0.0045045 |
| skim() | 1 | 0.0037594 | 0.0045045 |
| slice_max() | 1 | 0.0037594 | 0.0045045 |
| slice_min() | 1 | 0.0037594 | 0.0045045 |
| some() | 1 | 0.0037594 | 0.0045045 |
| spread() | 1 | 0.0037594 | 0.0045045 |
| stat_summary | 1 | 0.0037594 | 0.0045045 |
| str_glue() | 1 | 0.0037594 | 0.0045045 |
| str_match() | 1 | 0.0037594 | 0.0045045 |
| str_remove() | 1 | 0.0037594 | 0.0045045 |
| str_trim() | 1 | 0.0037594 | 0.0045045 |
| str_which() | 1 | 0.0037594 | 0.0045045 |
| string_extract() | 1 | 0.0037594 | 0.0045045 |
| summarise() | 1 | 0.0037594 | 0.0045045 |
| tidy() | 1 | 0.0037594 | 0.0045045 |
| View() | 1 | 0.0037594 | 0.0045045 |
| with_groups() | 1 | 0.0037594 | 0.0045045 |
| with_tz() | 1 | 0.0037594 | 0.0045045 |
| write_csv() | 1 | 0.0037594 | 0.0045045 |
| ymd*() | 1 | 0.0037594 | 0.0045045 |
| ymd_hms() | 1 | 0.0037594 | 0.0045045 |
| zap_label() | 1 | 0.0037594 | 0.0045045 |
Here’s all of the tweets from this thread (naysayers included). They are in somewhat order (longer threads are grouped).
Here’s a link to the cleaned CSV file
knitr::kable(cleaned_tweets)
| date | user | funcs | text |
|---|---|---|---|
| 2/12/2020 16:12 | NathanKhadaroo | expand_grid() | tidyr::expand_grid() is really useful for creating new datasets to see how fitted models perform on new data! |
| 2/12/2020 6:43 | sleepydatum | anti_join() | dplyr::anti_join() is my personal favorite. |
| 2/12/2020 1:19 | dragonflystats | NA | out of curiosity - who are the students? CS? Health Science? |
| 2/12/2020 1:22 | tladeras | NA | Biostatistics students. |
| 1/12/2020 19:15 | eulerdiditfirst | NA | Writing your own tidy verse functions from chaining tidy verse functions using {{}} . Seriously feels like a super power sometimes |
| 1/12/2020 18:34 | pedro_tfonseca | near() | dplyr::near is one of my favorite |
| 1/12/2020 18:28 | daniellequinn88 | uncount() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 1/12/2020 18:28 | daniellequinn88 | complete() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 1/12/2020 18:28 | daniellequinn88 | fill() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 1/12/2020 18:28 | daniellequinn88 | replace_na() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 1/12/2020 18:28 | daniellequinn88 | str_detect() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 1/12/2020 18:28 | daniellequinn88 | str_which() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 1/12/2020 18:28 | daniellequinn88 | ymd_hms() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 1/12/2020 18:28 | daniellequinn88 | labs() | dplyr::uncount(); tidyr::complete(); tidyr::fill() / replace_na(); stringr::str_detect() / str_which(); lubridate::ymd_hms() and related functions; ggplot2::labs() - so simple, yet under appreciated! |
| 1/12/2020 17:52 | AmeliaMN | separate() | I donâ€™t know if itâ€™s less known or not, by tidyr::separate() is very useful |
| 1/12/2020 18:04 | tladeras | pivot_wider() | Yes! Very useful. I do think that {tidyr} in general is less known outside of pivot_wider() and pivot_longer(). |
| 1/12/2020 18:04 | tladeras | pivot_longer() | Yes! Very useful. I do think that {tidyr} in general is less known outside of pivot_wider() and pivot_longer(). |
| 1/12/2020 18:32 | ElinWaring | fct_infreq() | Forcats is also not as well known but has tons of handy functions like fct_infreq(). |
| 1/12/2020 17:43 | rdh_CLE | dplyr::first() | Dplyr:: first and last |
| 1/12/2020 17:43 | rdh_CLE | dplyr::last() | Dplyr:: first and last |
| 1/12/2020 16:38 | IamBugsPotter | tabyl() | I know it’s not official but several times when starting out I would start collapsing things using dplyr before remembering I could just use janitor::tabyl() |
| 1/12/2020 16:42 | tladeras | tabyl() | tabyl() is the best, along with clean_names(). |
| 1/12/2020 16:42 | tladeras | janitor::clean_names() | tabyl() is the best, along with clean_names(). |
| 2/12/2020 1:18 | dragonflystats | {janitor} | i love Love LOVE Janitor |
| 1/12/2020 16:29 | aosmith16 | n_distinct() | I try to squeeze in dplyr::n_distinct() to my basic intro. In my experience mostly useful for data checking/qaqc (i.e., becoming one with your dataset). |
| 1/12/2020 16:43 | tladeras | skim() | Yes! Super helpful. I currently use skimr to give students an overview, but that’s super helpful in giving single variable summaries. |
| 1/12/2020 15:47 | harlananelson | NA | Why would you want students who are just learning r to write about some obscure function? |
| 1/12/2020 19:31 | tladeras | NA | The point is for them to learn on their own and teach others. These aren’t obscure functions, they’re just lesser known ones. ; ; I can’t teach them everything, so the more I can teach the meta-learning, the better they will be off in the future. |
| 1/12/2020 15:37 | WireMonkey | {forcats} | I use forcats all the time. It’s especially helpful in ggplot when reordering an axis. |
| 1/12/2020 16:44 | tladeras | {forcats} | Definitely! {forcats} has so many useful functions. |
| 1/12/2020 15:29 | foppoli_luca | fill() | tidyr::fill() - extremely useful when creating a usable dataset out of a spreadsheet originally built for data entry, in which redundant informations are only reported once at the beginning of the group they refer to, rather than in every row as needed for the analysis. |
| 1/12/2020 15:17 | SorensenOystein | uncount() | tidyr::uncount(); tidyr::unnest(); dplyr::ntile() |
| 1/12/2020 15:17 | SorensenOystein | unnest() | tidyr::uncount(); tidyr::unnest(); dplyr::ntile() |
| 1/12/2020 15:17 | SorensenOystein | ntile() | tidyr::uncount(); tidyr::unnest(); dplyr::ntile() |
| 1/12/2020 14:51 | randyboyes | coalesce() | dplyr::coalesce() is so handy when you need it |
| 1/12/2020 14:39 | Airrock_TheRed | case_when() | I personally find case_when(), select(), slice(), and separate_rows() very helpful. |
| 1/12/2020 14:39 | Airrock_TheRed | select() | I personally find case_when(), select(), slice(), and separate_rows() very helpful. |
| 1/12/2020 14:39 | Airrock_TheRed | slice() | I personally find case_when(), select(), slice(), and separate_rows() very helpful. |
| 1/12/2020 14:39 | Airrock_TheRed | separate_rows() | I personally find case_when(), select(), slice(), and separate_rows() very helpful. |
| 1/12/2020 14:28 | TooSweetGeek | NA | unroll |
| 1/12/2020 14:28 | threadreaderapp | NA | Saluti, you can read it here: : Hi Everyone. I’m teaching an #rstats course next quarter. One assignment is to have each student write aboutâ€¦ https://t.co/PJH3wqv7aO Share this if you think it’s interesting. ðŸ¤– |
| 1/12/2020 14:23 | rmkubinec | NA | Check out the dplyr window functions, cummin, cummax, cumany and cumall. They don’t seen useful at first but they can solve really tricky aggregation problems. https://t.co/aDpXqSB2Vx |
| 1/12/2020 14:12 | InflationSquare | paste() | %\(% makes using paste() easier (among other things). ; I use %T>% View() at the end of %>% chains a lot as well.; dplyr::dense_rank() is another good one that I wouldn't have come across if I didn't know the SQL equivalent.; dplyr::group_[keys, rows, indices] are neat as well | |1/12/2020 14:12 |[InflationSquare](https://twitter.com/InflationSquare/status/1333760840995049472) |View() |%\)% makes using paste() easier (among other things). ; I use %T>% View() at the end of %>% chains a lot as well.; dplyr::dense_rank() is another good one that I wouldn’t have come across if I didn’t know the SQL equivalent.; dplyr::group_[keys, rows, indices] are neat as well |
| 1/12/2020 14:12 | InflationSquare | dense_rank() | %\(% makes using paste() easier (among other things). ; I use %T>% View() at the end of %>% chains a lot as well.; dplyr::dense_rank() is another good one that I wouldn't have come across if I didn't know the SQL equivalent.; dplyr::group_[keys, rows, indices] are neat as well | |1/12/2020 14:12 |[InflationSquare](https://twitter.com/InflationSquare/status/1333760840995049472) |group_*() |%\)% makes using paste() easier (among other things). ; I use %T>% View() at the end of %>% chains a lot as well.; dplyr::dense_rank() is another good one that I wouldn’t have come across if I didn’t know the SQL equivalent.; dplyr::group_[keys, rows, indices] are neat as well |
| 1/12/2020 14:10 | PRLPoliSci | drop_na() | A lot of great ones in the thread so far! I’d also toss in drop_na |
| 1/12/2020 14:09 | stateofstats | pivot_wider() | pivot_wider() and pivot_longer(), formerly spread() and gather(). Incredibly useful in converting messy data into something useable |
| 1/12/2020 14:09 | stateofstats | pivot_longer() | pivot_wider() and pivot_longer(), formerly spread() and gather(). Incredibly useful in converting messy data into something useable |
| 1/12/2020 14:09 | stateofstats | spread() | pivot_wider() and pivot_longer(), formerly spread() and gather(). Incredibly useful in converting messy data into something useable |
| 1/12/2020 14:09 | stateofstats | gather() | pivot_wider() and pivot_longer(), formerly spread() and gather(). Incredibly useful in converting messy data into something useable |
| 1/12/2020 14:04 | Smith80D | fill() | tidyr::fill() is the one that I find especially useful, for all those imported Excel files with row headings that are merged. Always assumed it existed, but didn’t know its name until a colleague introduced us. |
| 1/12/2020 14:03 | wzzerd | case_when() | When you don’t teach case_when, students will go years nesting ifelse like absolute chumps! Alternatively, to relabel discrete data I like to left_join with a crosswalk table so the associations are not hardcoded in the script. |
| 1/12/2020 14:03 | wzzerd | left_join | When you don’t teach case_when, students will go years nesting ifelse like absolute chumps! Alternatively, to relabel discrete data I like to left_join with a crosswalk table so the associations are not hardcoded in the script. |
| 1/12/2020 14:02 | Dorialexander | lead() | dplyr::lead and dplyr::lag Very practical especially within groups and yet they can be a bit tricky since it obviously raise NAs on first/last rows. |
| 1/12/2020 14:02 | Dorialexander | lag() | dplyr::lead and dplyr::lag Very practical especially within groups and yet they can be a bit tricky since it obviously raise NAs on first/last rows. |
| 1/12/2020 14:01 | LuisDVerde | enframe() | tibble::enframe() |
| 1/12/2020 13:58 | sebvanliempd | pivot_longer() | pivot_longer(); pivot_wider() |
| 1/12/2020 13:58 | sebvanliempd | pivot_wider() | pivot_longer(); pivot_wider() |
| 1/12/2020 13:57 | kjhealy | case_when() | case_when() |
| 1/12/2020 13:51 | Laserhedvig | distinct() | Oh man I use distinct() so much, especially with arrange() before and .keep_all = T |
| 1/12/2020 13:51 | Laserhedvig | arrange() | Oh man I use distinct() so much, especially with arrange() before and .keep_all = T |
| 1/12/2020 13:51 | Laserhedvig | keep_all() | Oh man I use distinct() so much, especially with arrange() before and .keep_all = T |
| 1/12/2020 10:28 | ChloeFouilloux | gather() | tidyr:: gather () has saved me many a time when wrangling unruly data |
| 1/12/2020 10:19 | VizMonkey | add_count() | I haven’t seen add_count but that’s a good one. Also keep and discard. And string_extract |
| 1/12/2020 10:19 | VizMonkey | string_extract() | I haven’t seen add_count but that’s a good one. Also keep and discard. And string_extract |
| 1/12/2020 9:59 | MattAlhonte | separate() | separate is pretty awesome and something I covet from Python, so much so that I made a blog post about writing a hacky Pandas approximation! https://t.co/se5O4nR1sa |
| 1/12/2020 9:35 | Stephenpedj | NA | - You should add this founder to your candid interview list!! |
| 1/12/2020 8:04 | Guy_F_Sutton | unite() | I find myself using tidyr::unite() a lot to clean messy data - particularly useful for making unique and informative ID’s for each row. coalesce() and fill() are also little known gems! :) |
| 1/12/2020 8:04 | Guy_F_Sutton | coalesce() | I find myself using tidyr::unite() a lot to clean messy data - particularly useful for making unique and informative ID’s for each row. coalesce() and fill() are also little known gems! :) |
| 1/12/2020 8:04 | Guy_F_Sutton | fill() | I find myself using tidyr::unite() a lot to clean messy data - particularly useful for making unique and informative ID’s for each row. coalesce() and fill() are also little known gems! :) |
| 1/12/2020 7:25 | ephorie | NA | Neither of them: https://t.co/Fbw9RHE3YF |
| 1/12/2020 7:22 | Amit_Levinson | group_indices() | Found myself using group_indices() several times in the past weeks. Great for giving groups sequential ids. |
| 1/12/2020 7:10 | ReillyInnes | pivot_longer() | tidyr::pivot_longer/wider; dplyr::n_distinct; tibble::glimpse; Are some of my most used (as well as %>% ) |
| 1/12/2020 7:10 | ReillyInnes | n_distinct() | tidyr::pivot_longer/wider; dplyr::n_distinct; tibble::glimpse; Are some of my most used (as well as %>% ) |
| 1/12/2020 7:00 | bmwiernik | nest() | nest() / unnest() |
| 1/12/2020 7:00 | bmwiernik | unnest() | nest() / unnest() |
| 1/12/2020 6:51 | BenInquiring | map() | The map() family from {purrr} was a game changer for me. as_mapper() is a nifty little function, but might be a bit advanced. |
| 1/12/2020 6:51 | BenInquiring | as_mapper() | The map() family from {purrr} was a game changer for me. as_mapper() is a nifty little function, but might be a bit advanced. |
| 1/12/2020 6:18 | brodriguesco | NA | anything from {purrr} |
| 1/12/2020 5:24 | vishal_katti | case_when() | case_when() is one of my favourite #rstats dplyr functions. The formula-like syntax needs more explaining usually. This would be a good candidate for your assignment. |
| 1/12/2020 5:37 | tladeras | NA | We cover it in class. Itâ€™s way too useful to not cover it. |
| 1/12/2020 5:20 | EOTWorld28 | {tidyeval} | One more thing that is beneficial to users would be Non Standard Evaluation(NSE); How to send columns name/ column names are strings to user functions.; ; I am yet to get my head around sym/syms ! :) |
| 1/12/2020 5:22 | tladeras | {tidyeval} | We may get to curly-curly {{ }}, but it will probably be after we work with {purrr}. |
| 1/12/2020 4:46 | Breza | partial() | partial() is so useful! |
| 1/12/2020 5:18 | tladeras | partial() | pryr::partial()? |
| 1/12/2020 4:40 | dh_slone | tidy() | One more and then I’ll shut up ðŸ˜. sf is not part of the tidyverse, but it might as well be. Spatial file processing that is completely seamless with dplyr, ggplot, etc. I make all my maps with it these days.; And finally, the tidy() function from broom. |
| 1/12/2020 4:42 | tladeras | NA | Yes, {sf} is fantastic! Makes complicated spatial queries and joins much easier. |
| 1/12/2020 6:06 | dh_slone | make_valid() | make_valid() is the sf magic wand that solves random polygon slivers that often exist in data. |
| 1/12/2020 4:20 | dh_slone | NA | Not tidyverse per se, but lots of these cover the ’verse:; https://t.co/lPLTvRO02z; I keep a binder of these on my desk. |
| 1/12/2020 4:17 | dh_slone | between() | I have not seen between() mentioned yet. Are you covering magrittr? %<>% ? |
| 1/12/2020 4:26 | tladeras | between() | We will cover {magrittr} - and yes between() can be very useful. ; ; I am a little leery of the assignment pipe, because it can cause mistakes due to overwriting the data frame. |
| 1/12/2020 4:29 | dh_slone | NA | I’ve never done that and had to start over from the beginning. |
| 1/12/2020 4:06 | EOTWorld28 | group_walk() | I just learnt about the function â€œgroup_walkâ€; My requirement was to store my groups into separate csv files and group_walk() helps in just that in just single line of code!!; ; Still face palming myself to learn this so late !!ðŸ˜€ |
| 1/12/2020 4:27 | tladeras | NA | That’s a nice one! Very cool. |
| 1/12/2020 3:58 | cote_energy | slice_max() | slice_max, slice-min |
| 1/12/2020 3:58 | cote_energy | slice_min() | slice_max, slice-min |
| 1/12/2020 18:07 | cote_energy | n_tile() | Or n_tile! |
| 1/12/2020 3:55 | ellis_hughes | parse_*() | The readr parse_* functions. One of the listeners of #TidyX brought it up, and I’ve now used it so many places!! |
| 1/12/2020 3:43 | KellyBodwin | add_predictions() | I think broom::add_predictions() is criminally underrated. |
| 1/12/2020 3:09 | lisalendway | complete() | complete() |
| 1/12/2020 3:14 | tladeras | complete() | Good one! Always forget about complete() |
| 1/12/2020 3:12 | alexcookson | NA | Just used this today! So handy! |
| 1/12/2020 2:34 | jeremy_data | first() | These were less known to me for a long time, but that may just be my own fault :) so, first() last() and nth() on grouped data that is arranged. |
| 1/12/2020 2:34 | jeremy_data | last() | These were less known to me for a long time, but that may just be my own fault :) so, first() last() and nth() on grouped data that is arranged. |
| 1/12/2020 2:34 | jeremy_data | nth() | These were less known to me for a long time, but that may just be my own fault :) so, first() last() and nth() on grouped data that is arranged. |
| 1/12/2020 2:21 | usansky | anti_join() | dplyr::anti_join(); dplyr::coalesce() |
| 1/12/2020 2:21 | usansky | coalesce() | dplyr::anti_join(); dplyr::coalesce() |
| 1/12/2020 2:07 | lopierra | mutate() | Not a function, but I recently discovered you can use .before and .after with mutate() to put the new column where you want it, rather than the default all the way at the end. |
| 1/12/2020 1:47 | wouldeye125 | nest() | Honestly? nest() makes a lot of higher level stuff super easy |
| 1/12/2020 2:07 | tladeras | nest_by() | For sure. nest_by()/map() is probably one of the most powerful combos in the tidyverse. |
| 1/12/2020 2:07 | tladeras | map() | For sure. nest_by()/map() is probably one of the most powerful combos in the tidyverse. |
| 1/12/2020 1:46 | iamericfletcher | every() | every(), some(), and none() from {purrr}. |
| 1/12/2020 1:46 | iamericfletcher | some() | every(), some(), and none() from {purrr}. |
| 1/12/2020 1:46 | iamericfletcher | none() | every(), some(), and none() from {purrr}. |
| 1/12/2020 1:06 | PeeltothePithy | deframe() | tibble::deframe(), tibble::deframe(); coercing a two-column df to named vector, which I prefer immensely to names(df) <- vec_of_names |
| 1/12/2020 1:27 | tladeras | NA | This one is super helpful. I didn’t know about this one. |
| 1/12/2020 1:32 | grrrck | reduce() | Oh thatâ€™s cool! I often use purrr::reduce() for this and feel both clever and sorry for whoever reads my code next |
| 1/12/2020 1:35 | PeeltothePithy | left_join() | There are some truly horrific reduce(left_join) statements hanging around in some old code of mine, and I apologize to my erstwhile colleagues. |
| 1/12/2020 1:09 | PeeltothePithy | enframe() | also enframe(); ; DAMN YOU LACK OF EDIT |
| 1/12/2020 0:42 | CPumarFrohberg | fct_reorder() | forcats::fct_reorder()! Probably quite well-known, but its contribution to ordering levels in a visually intuitive way is not to be underestimated! |
| 1/12/2020 0:36 | Bouzoulay | map_dfr() | If it hasn’t been mentioned already, purrr::map_dfr() or dplyr::case_when() |
| 1/12/2020 0:36 | Bouzoulay | case_when() | If it hasn’t been mentioned already, purrr::map_dfr() or dplyr::case_when() |
| 1/12/2020 0:15 | tw0handt0uch1 | crossing() | crossing() is pretty handy and str_glue() can be quite powerful |
| 1/12/2020 0:15 | tw0handt0uch1 | str_glue() | crossing() is pretty handy and str_glue() can be quite powerful |
| 30/11/2020 23:43:53 | Luisfreii | str_trim() | stringr::str_trim() is pretty good |
| 30/11/2020 23:15:32 | ludictech | *_join() | The dplyr *_join()s and, well, all of stringr! str_wrap() can be pretty useful for wrapping eg plot titles to a certain length, str_match() or str_detect() are so useful… |
| 30/11/2020 23:15:32 | ludictech | str_wrap() | The dplyr *_join()s and, well, all of stringr! str_wrap() can be pretty useful for wrapping eg plot titles to a certain length, str_match() or str_detect() are so useful… |
| 30/11/2020 23:15:32 | ludictech | str_match() | The dplyr *_join()s and, well, all of stringr! str_wrap() can be pretty useful for wrapping eg plot titles to a certain length, str_match() or str_detect() are so useful… |
| 30/11/2020 23:15:32 | ludictech | str_detect() | The dplyr *_join()s and, well, all of stringr! str_wrap() can be pretty useful for wrapping eg plot titles to a certain length, str_match() or str_detect() are so useful… |
| 30/11/2020 23:17:52 | tladeras | str_wrap() | Oh yeah, str_wrap()! I had to use this for tooltips on a plotly plot recently. |
| 30/11/2020 23:11:26 | ludictech | read_csv() | readr::read_csv() & write_csv() … (or read_delim() more generally) ? |
| 30/11/2020 23:11:26 | ludictech | write_csv() | readr::read_csv() & write_csv() … (or read_delim() more generally) ? |
| 30/11/2020 23:11:26 | ludictech | read_delim() | readr::read_csv() & write_csv() … (or read_delim() more generally) ? |
| 30/11/2020 23:13:14 | tladeras | {readr} | Certainly. We spend time with both {readr} and {readxl} because I think that loading data is the biggest point of frustration for students. |
| 1/12/2020 3:42 | apreshill | problems() | Ooh problems is a good function for importing rx https://t.co/P4ZR57PgOG |
| 1/12/2020 3:48 | tladeras | NA | Ooooh. That looks great. Learning so much from this thread! |
| 30/11/2020 23:05:28 | ArthurGailes | across() | Don’t know how well known or is because it’s new, but I never go a day without using across() anymore |
| 30/11/2020 23:11:46 | tladeras | across() | across() is super useful! |
| 30/11/2020 22:48:18 | Trabendo_daze | case_when() | case_when() but that’s pretty well known |
| 30/11/2020 23:23:31 | tladeras | NA | There’s a reason it’s well known! Super Useful. |
| 30/11/2020 22:32:24 | JKubale | str_detect() | I don’t think str_detect(), case_when(), and zap_label() have been mentioned yet. Highly recommend. |
| 30/11/2020 22:32:24 | JKubale | case_when() | I don’t think str_detect(), case_when(), and zap_label() have been mentioned yet. Highly recommend. |
| 30/11/2020 22:32:24 | JKubale | zap_label() | I don’t think str_detect(), case_when(), and zap_label() have been mentioned yet. Highly recommend. |
| 30/11/2020 22:43:02 | tladeras | NA | Nice! I am a little {haven} illiterate, so happy to include this. |
| 30/11/2020 21:51:49 | trentlikesstats | slice() | slice() |
| 30/11/2020 21:45:07 | cmdline_tips | unite() | like unite() and separate(). have a post based on ’s talk https://t.co/Qre4ACTRd6 #rstats |
| 30/11/2020 21:45:07 | cmdline_tips | separate() | like unite() and separate(). have a post based on ’s talk https://t.co/Qre4ACTRd6 #rstats |
| 30/11/2020 22:08:15 | tladeras | NA | Nice! Thanks for putting this together. |
| 30/11/2020 22:13:18 | cmdline_tips | NA | the post was written immediately after ’s talk. I believe video of the talk is available now. |
| 30/11/2020 21:38:32 | robinson_es | NA | has a good talk https://t.co/s3LBiZ95tR |
| 30/11/2020 23:04:46 | jaredlander | NA | And herself has the lesser known stars talk https://t.co/80zdiWhIn4 |
| 30/11/2020 21:41:40 | ameresv | NA | One of the favorite. Also his screencast are the best. So much things to learn from it |
| 30/11/2020 21:40:34 | tladeras | NA | Noice! Thanks, Emily. |
| 30/11/2020 21:34:40 | pj_ballantyne | mutate_at() | mutate_at() and mutate_if() ðŸ˜ |
| 30/11/2020 21:34:40 | pj_ballantyne | mutate_if() | mutate_at() and mutate_if() ðŸ˜ |
| 30/11/2020 21:30:23 | nathaneastwood_ | with_groups() | There are plenty of lesser known experimental functions in dplyr 1.0.0 like with_groups(). Also some experimental features like .keep in mutate() |
| 30/11/2020 21:30:23 | nathaneastwood_ | mutate() | There are plenty of lesser known experimental functions in dplyr 1.0.0 like with_groups(). Also some experimental features like .keep in mutate() |
| 30/11/2020 21:28:13 | MikeMahoney218 | map_*() | purrr (and furrr) in general imo! I don’t know that map_* is more complicated than loops, but I think they’re underutilized. Also tidyr::nest and forcats::fct_reorder |
| 30/11/2020 21:28:13 | MikeMahoney218 | fct_reorder() | purrr (and furrr) in general imo! I don’t know that map_* is more complicated than loops, but I think they’re underutilized. Also tidyr::nest and forcats::fct_reorder |
| 30/11/2020 21:35:57 | tladeras | NA | We will get to {purrr} eventually. I’ve been trying to slowly distentangle the use case so one concept is learned at a time. It’s been tricky. ; ; https://t.co/A6r9jWtsCV |
| 30/11/2020 21:41:48 | MikeMahoney218 | safely() | TIL about safely ðŸ˜‚ I’ve mostly been writing package code recently & am reluctant to include tidyverse dependencies, but boy oh boy do I have some horrifying tryCatch calls that could probably stand to be replaced… |
| 30/11/2020 21:47:36 | tladeras | safely() | Ha. safely()/possibly() can be super useful and I just learned about it by putting this section together… |
| 30/11/2020 21:47:36 | tladeras | possibly() | Ha. safely()/possibly() can be super useful and I just learned about it by putting this section together… |
| 30/11/2020 21:28:03 | allawayr | pluck() | I went for way too long not knowing about purrr::pluck() |
| 30/11/2020 21:29:25 | allawayr | case_when() | Oh oh and case_when() lets me be super lazy. |
| 30/11/2020 21:19:36 | ijeamaka_a | fct_relevel() | Forcats::fct_relevel() and forcats::fct_reorder() |
| 30/11/2020 21:19:36 | ijeamaka_a | fct_reorder() | Forcats::fct_relevel() and forcats::fct_reorder() |
| 30/11/2020 21:19:32 | piquergaming | hoist() | Hoist() - when youâ€™re dealing with JSON (or dynamodb in my case) itâ€™s a lifesaver. |
| 30/11/2020 21:19:30 | chrishanretty | if_else() | if_else (and an example of where you need to use it/where baseR ifelse breaks down) |
| 30/11/2020 21:23:39 | tladeras | NA | Super useful! |
| 30/11/2020 21:18:48 | maggiedalena123 | anti_join() | anti_join() |
| 30/11/2020 21:17:37 | JJVenky | across() | mutate(across()) as in; ; data.frame(a=c(q,w,e), b=c(1,2,-1)) %>% mutate(across(c(b), na_if, -1)); ; or; ; data.frame(a=c(q,w,e), b=c(1,2,-1)) %>% mutate(across(c(b), ~replace(., .<0,NA)) |
| 30/11/2020 21:17:37 | JJVenky | na_if() | mutate(across()) as in; ; data.frame(a=c(q,w,e), b=c(1,2,-1)) %>% mutate(across(c(b), na_if, -1)); ; or; ; data.frame(a=c(q,w,e), b=c(1,2,-1)) %>% mutate(across(c(b), ~replace(., .<0,NA)) |
| 30/11/2020 21:28:10 | tladeras | across() | Yup, mutate(across()) is great. I do cover {tidyselect} in my {tidyowl} tutorials: https://t.co/pRvC9YJZQG |
| 30/11/2020 21:15:55 | aecoppock | coalesce() | dplyr::coalesce() |
| 30/11/2020 21:15:42 | _echong | pull() | dplyr::pull(), to emphasize the difference between a vector and a one-column dataframe. |
| 30/11/2020 21:20:04 | tladeras | pull() | This is really one of the hardest concepts to teach, but agreed, pull() makes it much more clear. |
| 30/11/2020 21:11:01 | apreshill | breaks_pretty() | I think all of the scales package is helpful; ; https://t.co/s5WMZcWwYR; ; I especially like breaks_pretty and the label functions: https://t.co/PtrVT2R7dM |
| 30/11/2020 21:15:05 | tladeras | breaks_pretty() | For sure. I usually don’t get to scales when I teach {ggplot2}, but I think it might be worth highlighting the useful cases like breaks_pretty(). |
| 30/11/2020 21:20:12 | apreshill | group_indices() | Oh and one more! Sometimes dplyr::group_indices is helpful. The actual reference page is less helpful, but this discussion on the implementation is quite good: https://t.co/sD3iauuN9B |
| 30/11/2020 20:53:23 | gvwilson | lag() | I am frequently surprised by how few people know about lag() |
| 2/12/2020 5:54 | EvenKeely | lead() | lead() and lag() are awesome for working with transect point data. |
| 2/12/2020 5:54 | EvenKeely | lag() | lead() and lag() are awesome for working with transect point data. |
| 30/11/2020 20:57:51 | tladeras | lead() | Agreed. The documentation/examples are a little terse for lead()/lag(), which may be why few people use them. |
| 30/11/2020 20:57:51 | tladeras | lag() | Agreed. The documentation/examples are a little terse for lead()/lag(), which may be why few people use them. |
| 30/11/2020 21:07:38 | apreshill | NA | I think in general the window functions could use some love https://t.co/8z9DdvFQgt |
| 30/11/2020 21:10:02 | tladeras | NA | Agreed! I think the window functions are really useful. |
| 30/11/2020 20:49:45 | kaiz_p | left_join() | left_join() and other joins, separate(), recode(), pivot_longer(), pivot_wider(), filter() |
| 30/11/2020 20:49:45 | kaiz_p | separate() | left_join() and other joins, separate(), recode(), pivot_longer(), pivot_wider(), filter() |
| 30/11/2020 20:49:45 | kaiz_p | recode() | left_join() and other joins, separate(), recode(), pivot_longer(), pivot_wider(), filter() |
| 30/11/2020 20:49:45 | kaiz_p | pivot_longer() | left_join() and other joins, separate(), recode(), pivot_longer(), pivot_wider(), filter() |
| 30/11/2020 20:49:45 | kaiz_p | pivot_wider() | left_join() and other joins, separate(), recode(), pivot_longer(), pivot_wider(), filter() |
| 30/11/2020 20:49:45 | kaiz_p | filter() | left_join() and other joins, separate(), recode(), pivot_longer(), pivot_wider(), filter() |
| 30/11/2020 20:59:28 | tladeras | recode() | All very useful! I sometimes do get confused over whether to teach recodeI() vs case_when() - they’re both useful, but the use cases are different. |
| 30/11/2020 20:59:28 | tladeras | case_when() | All very useful! I sometimes do get confused over whether to teach recodeI() vs case_when() - they’re both useful, but the use cases are different. |
| 30/11/2020 21:08:24 | kaiz_p | case_when() | Good point! ; I previously used case_when() for all my recoding needs, but then I discovered recode() and itâ€™s so much easier. Less code = fewer mistakes! |
| 30/11/2020 21:08:24 | kaiz_p | recode() | Good point! ; I previously used case_when() for all my recoding needs, but then I discovered recode() and itâ€™s so much easier. Less code = fewer mistakes! |
| 30/11/2020 21:09:25 | kaiz_p | case_when() | I now use case_when() mostly when Iâ€™m looking for a string – grepl() or when working across multiple columns – case_when(A == â€œaâ€ & B == â€œbâ€ ~ â€œabâ€) |
| 30/11/2020 21:09:25 | kaiz_p | grepl() | I now use case_when() mostly when Iâ€™m looking for a string – grepl() or when working across multiple columns – case_when(A == â€œaâ€ & B == â€œbâ€ ~ â€œabâ€) |
| 30/11/2020 21:09:25 | kaiz_p | case_when() | I now use case_when() mostly when Iâ€™m looking for a string – grepl() or when working across multiple columns – case_when(A == â€œaâ€ & B == â€œbâ€ ~ â€œabâ€) |
| 2/12/2020 0:38 | EvenKeely | NA | (TRUE ~ You missed one) |
| 2/12/2020 0:41 | tladeras | NA | I feel seen. |
| 30/11/2020 21:11:16 | tladeras | case_when() | Very true. It can be hard to see which cases you missed when you write a case_when() statement, much like writing nested if() statements. |
| 30/11/2020 21:11:16 | tladeras | if() | Very true. It can be hard to see which cases you missed when you write a case_when() statement, much like writing nested if() statements. |
| 30/11/2020 20:43:48 | Corey_Yanofsky | replace_na() | dplyr::arrange & helper dplyr::desc; dplyr::coalesce; tidyr::replace_na; ; https://t.co/h9ew04PYcU |
| 30/11/2020 20:46:12 | tladeras | coalesce() | Ha! ; ; And coalesce()/replace_na() are great. Adding them to the list. |
| 30/11/2020 20:46:12 | tladeras | replace_na() | Ha! ; ; And coalesce()/replace_na() are great. Adding them to the list. |
| 30/11/2020 20:32:01 | Recon1974 | NA | do you teach tidyverse directly or base r first? |
| 30/11/2020 20:34:58 | tladeras | NA | I teach just enough base R for them to understand vectors, functions, and data.frames. ; ; You can see the previous class here: https://t.co/4WweuqMSl8; ; The rest is mostly tidyverse, except for the cases when they will encounter base-R a lot. |
| 30/11/2020 20:40:42 | tladeras | NA | I know this is probably controversial, but my goal is to get them up and working usefully as quickly as possible, rather than teach a standard programming course, which you have to learn a lot of things before you do something useful. |
| 30/11/2020 20:30:29 | BeltzEcology | floor_date() | lubridate::floor_date; ; I have recently become a HUGE fan! |
| 1/12/2020 19:17 | eulerdiditfirst | {tsibble} | Shout out to tsibble; if youâ€™re using times series data you should def check it out |
| 30/11/2020 21:18:36 | JenRichmondPhD | parse_date_time() | also lubridate::parse_date_time() is kinda magic |
| 30/11/2020 21:49:37 | tladeras | NA | It is definitely magic. |
| 1/12/2020 4:12 | dh_slone | ymd*() | most of lubridate is magical. I use the heck out of ymd…() and similar, with_tz() and force_tz() take care of my biggest headaches, floor_date(), and ceiling_date(), etc. |
| 1/12/2020 4:12 | dh_slone | with_tz() | most of lubridate is magical. I use the heck out of ymd…() and similar, with_tz() and force_tz() take care of my biggest headaches, floor_date(), and ceiling_date(), etc. |
| 1/12/2020 4:12 | dh_slone | force_tz() | most of lubridate is magical. I use the heck out of ymd…() and similar, with_tz() and force_tz() take care of my biggest headaches, floor_date(), and ceiling_date(), etc. |
| 1/12/2020 4:12 | dh_slone | floor_date() | most of lubridate is magical. I use the heck out of ymd…() and similar, with_tz() and force_tz() take care of my biggest headaches, floor_date(), and ceiling_date(), etc. |
| 1/12/2020 4:12 | dh_slone | ceiling_date() | most of lubridate is magical. I use the heck out of ymd…() and similar, with_tz() and force_tz() take care of my biggest headaches, floor_date(), and ceiling_date(), etc. |
| 30/11/2020 20:35:21 | tladeras | NA | Ooh, this is great! Thanks! |
| 30/11/2020 20:37:36 | BeltzEcology | NA | Welcome! |
| 30/11/2020 20:15:42 | emilmalta | uncount() | I use these all the time:; tidyr::uncount(); tidyr::separate and tidyr::separate_rows(); forcats::fct_inorder(); forcats::fct_infreq() |
| 30/11/2020 20:15:42 | emilmalta | separate_rows() | I use these all the time:; tidyr::uncount(); tidyr::separate and tidyr::separate_rows(); forcats::fct_inorder(); forcats::fct_infreq() |
| 30/11/2020 20:15:42 | emilmalta | fct_inorder() | I use these all the time:; tidyr::uncount(); tidyr::separate and tidyr::separate_rows(); forcats::fct_inorder(); forcats::fct_infreq() |
| 30/11/2020 20:15:42 | emilmalta | fct_infreq() | I use these all the time:; tidyr::uncount(); tidyr::separate and tidyr::separate_rows(); forcats::fct_inorder(); forcats::fct_infreq() |
| 30/11/2020 23:49:22 | samclifford | fct_explicit_na() | Been using forcats::fct_explicit_na() of late. |
| 30/11/2020 20:17:34 | tladeras | separate_rows() | Yes, we cover tidyr a little bit. These are great suggestions, especially separate_rows() |
| 30/11/2020 20:37:29 | GenomeGal | separate_rows() | Yes! Separate_rows is my life - so useful!! |
| 30/11/2020 20:21:21 | emilmalta | uncount() | One thing that really made everything click for me, when learning tidy data, was that uncount() is in tidyr, and not dplyr.; ; Itâ€™s kinda subtle, but it was the thing that made me realize that tidying!=transforming. |
| 30/11/2020 20:31:05 | tladeras | NA | Yes, this distinction escaped me at first. I guess it’s like the form versus content distinction. |
| 30/11/2020 20:15:12 | kaija_bean | pivot_longer() | pivot_longer() and pivot_wider() are great! |
| 30/11/2020 20:15:12 | kaija_bean | pivot_wider() | pivot_longer() and pivot_wider() are great! |
| 30/11/2020 20:16:33 | tladeras | NA | They are great! |
| 30/11/2020 20:15:41 | kaija_bean | NA | And although they’re basically inverses of each other, each one had different arguments and different things to pay attention to, so I could easily see one student doing each of them without too much overlap. |
| 30/11/2020 20:11:38 | JayUlfelder | case_when() | A few that come to mind: dplyr::case_when(), purrr::map(), dplyr::group_map(), purrr::walk(), and purrr::pluck(). |
| 30/11/2020 20:11:38 | JayUlfelder | map() | A few that come to mind: dplyr::case_when(), purrr::map(), dplyr::group_map(), purrr::walk(), and purrr::pluck(). |
| 30/11/2020 20:11:38 | JayUlfelder | group_map() | A few that come to mind: dplyr::case_when(), purrr::map(), dplyr::group_map(), purrr::walk(), and purrr::pluck(). |
| 30/11/2020 20:11:38 | JayUlfelder | walk() | A few that come to mind: dplyr::case_when(), purrr::map(), dplyr::group_map(), purrr::walk(), and purrr::pluck(). |
| 30/11/2020 20:11:38 | JayUlfelder | pluck() | A few that come to mind: dplyr::case_when(), purrr::map(), dplyr::group_map(), purrr::walk(), and purrr::pluck(). |
| 30/11/2020 20:13:52 | tladeras | case_when() | Yup, these are really useful! I do cover case_when() because it’s so universally useful. ; ; And I’m going to cover {purrr} a little bit. group_map() and walk() are great suggestions. |
| 30/11/2020 20:13:52 | tladeras | group_map() | Yup, these are really useful! I do cover case_when() because it’s so universally useful. ; ; And I’m going to cover {purrr} a little bit. group_map() and walk() are great suggestions. |
| 30/11/2020 20:13:52 | tladeras | walk() | Yup, these are really useful! I do cover case_when() because it’s so universally useful. ; ; And I’m going to cover {purrr} a little bit. group_map() and walk() are great suggestions. |
| 30/11/2020 20:06:04 | ivelasq3 | fill() | Is tidyr::fill() lesser known? [regardless I love it]; ; Sharing just in case you haven’t seen this! https://t.co/cpJfD56rxB |
| 30/11/2020 20:06:44 | tladeras | NA | Ooh! This is perfect. Thanks! |
| 30/11/2020 19:42:31 | francisco_yira | cut_width() | ggplot2::cut_width, cut_number and cut_interval to transform continuous variables into discrete bins |
| 30/11/2020 19:42:31 | francisco_yira | cut_number () | ggplot2::cut_width, cut_number and cut_interval to transform continuous variables into discrete bins |
| 30/11/2020 19:42:31 | francisco_yira | cut_interval() | ggplot2::cut_width, cut_number and cut_interval to transform continuous variables into discrete bins |
| 30/11/2020 19:43:33 | tladeras | NA | Ah, very interesting! |
| 30/11/2020 19:40:55 | tladeras | relocate() | Here’s the list so far:; ; - dplyr::relocate(); - dplyr::count() / n(); - dplyr::distinct(); - dplyr::glimpse(); - dplyr::slice(); - ggplot2::geom_count() |
| 30/11/2020 19:40:55 | tladeras | count() | Here’s the list so far:; ; - dplyr::relocate(); - dplyr::count() / n(); - dplyr::distinct(); - dplyr::glimpse(); - dplyr::slice(); - ggplot2::geom_count() |
| 30/11/2020 19:40:55 | tladeras | n() | Here’s the list so far:; ; - dplyr::relocate(); - dplyr::count() / n(); - dplyr::distinct(); - dplyr::glimpse(); - dplyr::slice(); - ggplot2::geom_count() |
| 30/11/2020 19:40:55 | tladeras | distinct() | Here’s the list so far:; ; - dplyr::relocate(); - dplyr::count() / n(); - dplyr::distinct(); - dplyr::glimpse(); - dplyr::slice(); - ggplot2::geom_count() |
| 30/11/2020 19:40:55 | tladeras | glimpse() | Here’s the list so far:; ; - dplyr::relocate(); - dplyr::count() / n(); - dplyr::distinct(); - dplyr::glimpse(); - dplyr::slice(); - ggplot2::geom_count() |
| 30/11/2020 19:40:55 | tladeras | slice() | Here’s the list so far:; ; - dplyr::relocate(); - dplyr::count() / n(); - dplyr::distinct(); - dplyr::glimpse(); - dplyr::slice(); - ggplot2::geom_count() |
| 30/11/2020 19:40:55 | tladeras | geom_count() | Here’s the list so far:; ; - dplyr::relocate(); - dplyr::count() / n(); - dplyr::distinct(); - dplyr::glimpse(); - dplyr::slice(); - ggplot2::geom_count() |
| 1/12/2020 17:06 | robbins_ave | add_count() | dplyr::add_count() is often useful |
| 1/12/2020 14:23 | delaBJL | stat_summary | ggplot2::stat_summary is fun; ; I use a lot of the stringr functions, str_remove(), str_detect(); ; pivot_longer() and pivot_wider() are fairly simple to grok and are incredibly useful |
| 1/12/2020 14:23 | delaBJL | str_remove() | ggplot2::stat_summary is fun; ; I use a lot of the stringr functions, str_remove(), str_detect(); ; pivot_longer() and pivot_wider() are fairly simple to grok and are incredibly useful |
| 1/12/2020 14:23 | delaBJL | str_detect() | ggplot2::stat_summary is fun; ; I use a lot of the stringr functions, str_remove(), str_detect(); ; pivot_longer() and pivot_wider() are fairly simple to grok and are incredibly useful |
| 1/12/2020 14:23 | delaBJL | pivot_longer() | ggplot2::stat_summary is fun; ; I use a lot of the stringr functions, str_remove(), str_detect(); ; pivot_longer() and pivot_wider() are fairly simple to grok and are incredibly useful |
| 1/12/2020 14:23 | delaBJL | pivot_wider() | ggplot2::stat_summary is fun; ; I use a lot of the stringr functions, str_remove(), str_detect(); ; pivot_longer() and pivot_wider() are fairly simple to grok and are incredibly useful |
| 1/12/2020 15:37 | toeb18 | str_wrap() | str_wrap is also a fantastic one |
| 1/12/2020 13:59 | GMFranceschini | case_when() | case_when(), group_by()/summarise() |
| 1/12/2020 13:59 | GMFranceschini | group_by() | case_when(), group_by()/summarise() |
| 1/12/2020 13:59 | GMFranceschini | summarise() | case_when(), group_by()/summarise() |
Feel free to use and modify.
rtweet
to extract replies - you have to use recursion to extract all of the thread replies that belong to a tweet, and this was easily modifiable.This post is my thank you for everyone who contributed to this thread. Thank you!


{% extends 'base.html' %} {% block content %}
You are logged in as user {{ username }}. The client application {{ client_display_name }} is requesting a Tapis access token on your behalf.
Error: {{ error }}


BEFORE this session, for each of the following videos or reading:
After doing the above, but before doing the in-class project (in PyCharm):
When you are ready to begin the in-class project (in PyCharm):
Open PyCharm. Do:
VCS ~ Update Project
to obtain the new in-class project if it is not already in your PyCharm.
Watch this start-the-session video.
When the video reviews the answers to the before-the-session quiz that you did in the previous step:
The video may do some “follow-me” coding.


Lifestyle | Consumer Products & Services | Entertainment
Andre Sobel River of Life Charity Gala Announcement
Raspin Stuwart/"King of Fools" Record Release
CCCXXXIII Luxury Accessories Announcement
BeautyCon.com
BeautyCon Releases "FOMO" Consumer Study
2017 BeautyCon Ticket Sales Announcement
Hospitality/Restaurant Clients
Pullman San Francisco: Chef Mariano Lalica
Ready to get started? Call or send me an email, and I will reach out as soon as possible!
1-310-497-7157


This class is used to train any distribution using the EM algorithm.
Inheritance:
Public Fields
-
Distribution* distribution
- the distribution to train
-
real end_accuracy
- the stopping criterion regarding the accuracy for EM
-
int max_iter
- the stopping criterion regarding the number of iterations for EM
-
bool viterbi
- when viterbi is true, use Viterbi training instead of EM training
Public Methods
-
EMTrainer(Distribution* distribution_)
-
virtual void decode(MeasurerList* measurers)
- this method computes the most likely path into the distribution.
Inherited from Trainer:
Public Methods
-
virtual void train(DataSet* data_, MeasurerList* measurers)
-
virtual void test(MeasurerList* measurers)
-
static Allocator* extractMeasurers(MeasurerList* measurers, DataSet* train, DataSet*** datas, Measurer**** meas, int** n_meas, int* n_datas)
-
virtual void loadXFile(XFile* file)
-
virtual void saveXFile(XFile* file)
Inherited from Object:
Public Fields
-
Allocator* allocator
Public Methods
-
void addOption(const char* name, int size, void* ptr, const char* help="")
-
void addIOption(const char* name, int* ptr, int init_value, const char* help="")
-
void addROption(const char* name, real* ptr, real init_value, const char* help="")
-
void addBOption(const char* name, bool* ptr, bool init_value, const char* help="")
-
void addOOption(const char* name, Object** ptr, Object* init_value, const char* help="")
-
void setOption(const char* name, void* ptr)
-
void setIOption(const char* name, int option)
-
void setROption(const char* name, real option)
-
void setBOption(const char* name, bool option)
-
void setOOption(const char* name, Object* option)
-
void load(const char* filename)
-
void save(const char* filename)
-
void* operator new(size_t size, Allocator* allocator_=NULL)
-
void* operator new(size_t size, Allocator* allocator_, void* ptr_)
-
void operator delete(void* ptr)
Documentation
This class is used to train any distribution using the EM algorithm.
It can also train using the Viterbi training algorithm.
- Distribution* distribution
- the distribution to train
- real end_accuracy
- the stopping criterion regarding the accuracy for EM
- int max_iter
- the stopping criterion regarding the number of iterations for EM
- bool viterbi
- when viterbi is true, use Viterbi training instead of EM training
- EMTrainer(Distribution* distribution_)
- virtual void decode(MeasurerList* measurers)
- this method computes the most likely path into the distribution.
mainly used for sequential distribution such as HMMs.
- This class has no child classes.
- Author:
- Samy Bengio<EMAIL_ADDRESS>Alphabetic index HTML hierarchy of classes or Java
This page was generated with the help of DOC++.


We extend metrics!
- facilitate rich communities
- engage killer methodologies
- enable clicks-and-mortar experiences
- enable enterprise web-readiness
- embrace web-enabled channels
- transition vertical technologies
- target wireless web services
- engage web-enabled e-markets
- enhance cross-media paradigms
- evolve customized web-readiness
- revolutionize value-added experiences
- reintermediate leading-edge initiatives
- strategize front-end markets


| Home | Trees | Indices | Help |
|
|---|
|
|
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
Inherited from Inherited from |
|
|||
_min = 0
|
|||
_max = 100
|
|||
|
Inherited from |
|
|||
|
Inherited from |
|
x.__init__(...) initializes x; see help(type(x)) for signature
|
|
|
|
|
|
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Fri Sep 11 13:06:33 2015 | http://epydoc.sourceforge.net |


MARKING CG ON THE CHASSIS:
1.The material i'm using for chassis is acrylic having thickness of 4mm, wheel base is 15cm.
2.Locate the midpoint of wheelbase and the length of tha chassis.
3.Draw a line parallel to length passing through the midpoint and do the same for the wheelbase.
4.These lines are called the centre lines of the chassis.
5.The point of intersection of the centre lines is the CG of the chassis.
FIXING THE MOTOR ON CHASSIS:
1.Fix the 15 teeth gear on motor by tightening the screw.
2.Now place the motor on the chassis such that the gear is aligned with the centre line.
3.We'll be fixing the motor with the help of U-clamp.For this firstly, put the clamp on the motor and mark the points for hole.
4.Using drillbit of 3mm, drill the holes and then tighten the screw properly(NOTE: Use washers also for proper fastening).
5.Cut a piece of chloroplast and place it under the motor to prevent the misalignment of motor on the chassis.
FIXING REAR AXLE ON THE CHASSIS:
1.Measure the length of the shaft and mark its midpoint.
2.Measure the width of gear(say2.8cm).So its 1.4cm on either sides, mark these points.Place the gear properly and tigthen the screw.
3.Engage the gears properly and mark the points 1.5cm away from both the edges of the chassis as well as axle.
4.For fixing the bearings, put the sleeves on both the sides such that it sandwitches the bearing to prevent the lateral motion of the bearings.
5.While inserting the bearings their centre-line must align with the point marked on the chassis.
6.The sleeves were not fit enough to stop the lateral movement in my case.So, I used tape to increase the dia of the axle only upto the length required for the sleeve(not where bearings are placed).
7.Use a piece of chloroplast to prevent the sliding of bearings on the chassis.
8.Cut a 1cmx1cm of slot in the piece of chloroplast such that only top layer is removed.Use sharp tools carefully.I chopped my skin while making the slot.
9.Mesh the gears and place the rear axle such that gear is positioned left.
10.Place the sheet under the bearing and fix it on chassis using glue on all the four sides.
10.Mark the points on the chassis next to chloroplast benches in the line of bearings on both the sides.
11.Do make sure on the right side point is marked between the motor and bearings to make drilling process easy.
12.Drill 3mm hole at the points marked on the chassis.
13.Tighten the bearings a little using zip ties through the holes drilled. CONNECTING ROD FOR SUSPENSION:
1.Take 15cm aluminium rod.Cut two 4cm pieces from it using jr. hacksaw.inish the edges using sandpaper.
2.Now on both the pieces mark a point(say A) at 1.1cm away from either side of the rod(say O).
3.Mark another point from A at 1cm(say B).
4.Now turn the rod at an angle of 90 and mark a point from O at 3.1cm(sayC).
5.Drill the holes at the marked points.Drilling will be easier if you flatten the rod a little.
6.At point A drill by using a drillbit of 2mm.
7.Drill other two holes by using a drillbit of 3mm.Remove the abrasives using sandpaper.
8.Take two 5cm copper connecting rod.Make it L-shaped at 1cm using nose-plier.
9.Insert this connecting rod in the 2mm hole drilled on the rod.
10.For fixing the connecting rod, mark two points at a distance of 5mm from the edges of the slot on both the sides of the chassis.
11.Drill the holes using 3mm drillbit.Fix the connecting rod using zip ties such that they are fixed with the chassis.
12.L-shaped bent must be towards the front end of the chassis.
13.The rod must be free to move after fixing of connecting rod.
FIXING THE SUSPENSION:
1.Fix the two aluminium L-clamps on the chassis by marking the holes on the chassis and drilling them with 3mm drillbit.Tighten the screw properly.
2.Take a 3mm screw and pass it thrugh the second hole(3mm) of the connecting rod and fix it tight with the nut using screw driver.
3.Take a 2.5cm sleeve and insert it in the screw of connecting rod as shown.Follow the same procedure on the other side as well.
4.To fix the suspension, first insert a screw of 3mm on the topmost hole of the L-clamp and tighten it with nut by using nose-plier and screw-driver.After that we will push the sleeve in the screw.
5.Do repeat the same procedure on the other clamp. NOTE:If the sleeve do not fix tightly you can use washers at bith the ends to restrict its motion.
6.Now take the suspension and fix it on the screw which you have just assembled in the clamp and pipe.Make sure to keep the rotating heads upwards.
7.After this fix the suspension with the nuts on both the sides.
8.Follow same steps on the other side. FABRICATION OF THE STEERING ARM:
1.Take 15cm long aluminium rod and mark its midpoint.Cut it by using Jr.Hacksaw.
2.Mark a point at 2.5cm from one end(say A) of the rod.Mark another point at 2mm from A.
3.Make it at a height of 5mm and make a block by joining both these lines.
4.Follow the same procedure on the other part of the rod.
5.Cut the lines marked by tilting the Jr.Hacksaw so that it forms a V-shape.Width of slot must not exceed 2mm.
6.Place the nose-plier on the slot and press it to flatten the rod a little.It will faciliate easy bending of the rod.
7.Now using two nose-pliers hold the rod at both the ends and bend the rod at the required angle of 110.Draw the image as shown with correct angles and use it as reference for bending the rods.
8.Mark a point at a distance of 5mm from the bent area as shown.
9.After that we need to punch the holes on both the rods by placing the star-screw on top of it and hammering it carefully.This is done so that holes can be drilled easily.
10.Drill the punched holes using drillbit of 3mm.
11.Insert the ball bearings in the couplers.
12.Put the smaller arm of the steering arm into the ball-bearing.If it doesnot fit tightly use some paper-tape to increase the outer diameter of the steering arm. 13.Take a 3mm screw and insert it in the connecting rod which is already attached with the chassis.Tighten the nut using nose-plier and screw-driver.
14.Now insert the bent rod in this screw and tighten it with nut such that the motion of bent rod is not restricted.
15.Place the wheels and tighten the screw.Do it properly as the coupler might break.
16.Apply glue in the front wheels to fix it with coupler.
17.Fix the rear wheels also and tighten them properly.
18.Place the servo-motor in its slot smoothly as material of chassis is brittle as shown.Make sure that wire pass beneath the slot and servo gear is aligned with the centre-line. FINAL STEERING CONNECTIONS:
1.I have used plastic strips as linkages to fix the steering arm and servo-arm.
2.
Want To Write About Us!
Share your views and ideas to help me improve the site.


Being John Malkovich * * * 1/2 (out of * * * * )
Directed by Spike Jonze. Cast: John Cusack, Cameron Diaz, Catherine Keener, John Malkovich, Orson Bean, Mary Kay Place, Charlie Sheen. 1999 - 112 minutes Rated R (for profanity and sexual situations). Reviewed by Dustin Putman, December 4, 1999.
When you go see movies on a regular basis, you are bound to become more savvy in the calculations of any one story, being able to pinpoint elements that have been done just a few too many times in previous films for it to be surprising or particularly memorable. Sometimes, you want to see a movie so that it will take you on some sort of journey that has never, or rarely, been taken before in the world of film.
Such is the case with director Spike Jonze's "Being John Malkovich," which is bound to be one the most unusual motion pictures of 1999. And I don't mean in a David Lynchian sort of way, because while it may have hints of that "Twin Peaks" helmer's trademark weirdness and peculiarities, it has an overall style all its own. Just the thought that someone actually conjured up such an inventive tale (screenwriter Charlie Kaufman) gives hope for further innovative motion pictures that may be struggling through the pipeline simply because they are too "strange" to actually be made. In that respect, "Being John Malkovich" is groundbreaking in its sheer abandon of conventional plots, and in its embrace of nothing but complete originality.
While the story may seem confusing, it surprisingly makes total sense (well, at least as much of it as one can possibly understand). Ultimately, one could even see how, in lesser hands, this film could have been disastrous. Its tricky tone was, no doubt, difficult to perfect, as it is an out-and-out fantasy, but set in a very realistic present day New York City, yet relies on its offbeat humor to pull off the act. In fact, the comedy needed to be successful because, otherwise, the film would have just been too preposterous. One of the delights about "Being John Malkovich" is how very funny it is--easily one of the most laugh-inducing I've seen this year--and once the viewer settles into its oddball tone, the film entertains, excites, and is even thought-provoking in its handling of such issues as identity discovery and the manipulation over others.
Craig Schwartz (John Cusack) is a down-on-his-luck master puppeteer without a job and much money, living in a Manhattan apartment with his pet store-owning and animal-loving wife Lotte (Cameron Diaz). Tired of his life going nowhere, Craig finds an ad in the classifieds and answers the position of a filing clerk--on the 7 1/2th floor of an office building, where the ceiling is just four feet high. The inhabitants of the floor are an unusual bunch, including Floris (May Kay Place), the hearing-impaired secretary who misunderstands almost everything a person says and, yet, believes it is not she, but them that have the handicap; and the 105-year-old boss, Dr. Lester (Orson Bean), who is convinced Floris cannot understand him because he has a speech impediment (when Craig tells Dr. Lester that he can understand him perfectly fine, his reply is, "Flattery will get you nowhere with me."). And then there's Maxine (Catherine Keener), an alluring, beautiful woman whom Craig instantly falls head over heels for, even though the feeling is clearly not mutual.
One day, when Craig accidentally drops a file behind a stack of cabinets in his office, he removes them from the wall to find a small doorway, large enough to crawl through. Opening it up and venturing inside the seemingly never-ending tunnel, a force abruptly blows him through the portal, and he suddenly finds himself in the mind of actor John Malkovich, peering through his eyes--but only for a 15-minute period--after which he is dumped upon the embankment next to the New Jersey Turnpike. It's a bit tricky to say much more, in fear of giving away too much (even though, believe me, I haven't even scratched the surface), but suffice to say, in a plot to make money, Craig and Maxine start their own business where anyone can go into Malkovich's mind for $200 a pop. Meanwhile, Craig and Lotte both become addicted to being able to take over the identity of another person, sparked by their unhappiness in the lives they currently lead.
One might wonder why John Malkovich, playing a version of himself very well, is the celebrity that was chosen as the subject of the film, but it does sort of have a symmetry to it, since he is a consistently well-received actor who the casual filmgoer most likely has heard of, but knows nothing about. A running joke in the film is that the characters can't think of any movies he's been in, even though they seem to remember him playing a jewel thief. The ingenious idea of being able to get inside the mind of another human being is something I do not recall ever being done before, and while obviously far-fetched, the film is realistic in its portrayal of people who find themselves being swept away by the thought of being someone else, someone more successful and respected than they are.
The three central characters are portrayed by a talented crop of actors who take every role they play, and run with them. John Cusack is very good as Craig, a man with very little self-esteem and bad posturing (he walks slumped over, even when not on the 7 1/2th floor). Of the three major roles, however, Craig is the least interesting and flashy one, and he doesn't go through as much of an internal transformation like the others do. Cusack is flawlessly cast and does a fine job with what he is given, but if there is an underwritten role here, it is his.
When Cameron Diaz first appeared on the scene in 1994's "The Mask," it's difficult to believe anyone could have suspected she was such a stunningly diverse talent, not to mention one of the most intelligent actresses of her generation. Diaz can star as the likable love interest in a blockbuster film (1998's "There's Something About Mary"), but is just as likely to try something a little more risky and challenging (a crazed, self-absorbed bride-to-be in 1998's "Very Bad Things"). With "Being John Malkovich," Diaz gives her most assured performance to date, as the frizzy-haired, frumpy Lotte, and is nearly unrecognizable compared to the beauty she really is. In a plot development that won't be revealed here, Lotte comes to a life-altering realization after her first trip inside John Malkovich's mind. While outrageous on first thought, it is also oddly believable and wholly makes sense when you think about it in the context of the character.
Catherine Keener, a marvel to behold in every single film she appears in, exudes an outer iciness on first appearance, as Maxine, but wisely is developed into a confused and lonely three-dimensional character by the film's second half. Working in the world of indie films for several years, Keener is just now breaking out into bigger roles in more high-profile projects, and good for her. She deserves all the attention she is just starting to receive.
The writing, by Charlie Kaufman, is full of such intelligent, dry wit and appropriately goofy ideas, that the film is a comic goldmine, even among the more serious aspects of the story. The opening sections, especially, almost had me on the verge of completely breaking down at the thought of its sheer hilarity. Director Spike Jonze (who had an impressive acting role as the fourth king in "Three Kings") proves here to be one of the most exciting and fresh current filmmakers, and kudos to him for obtaining the willpower and courage to film such a purely individualistic creation. "Being John Malkovich" is a stunner through-and-through, and can safely stand as one of the very best motion pictures of the season.
- Copyright 1999 by Dustin Putman Http://www.atnzone.com Http://www.young-hollywood.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


The Ice Pirates A review by Joe Chamberlain
Starring Robert Urich; Mary Crosby; Anjelica Huston; Ron Perlman & Michael D. Roberts
Cheesy from the word go. But I enjoyed it. I have to say that The Ice Pirates holds a few memories for me. When I first saw it in a theater, oh so many years ago, it was the first movie that I had ever seen in a theater with any sort of sexually suggestive dialogue. Quite the shock. It is also the very first movie I ever rented when I got my very first VCR. I didn't get it because it was so spectacular the first time around, but because it was Christmas and there wasn't a great selection in the video store. Watching this time, I was surprised at just how packed to the max with cheese this sucker really was. Although, that seems to be the intention of the filmmakers. I can't imagine that they ever expected anyone to take this film too seriously.
The Ice Pirates is set in a distant galaxy where ongoing wars have depleted the galaxy of water. So the most precious commodity is ice, and the evil rulers of the galaxy control that. Robert Urich (yes, Spencer: For Hire) plays an ice pirate who makes his living hijacking transport ships filled with shipments of ice. His crew is a motley band of scoundrels including Anjelica Huston. (Yes, that Anjelica Huston). On one of these raids, Urich runs into a beautiful princess (Mary Crosby -- Bing's daughter). He ends up falling for her and the two of them go off looking for her father -- who has disappeared. This is a big simplification, but to be honest, in The Ice Pirates, I don't think plot was ever something that anyone was real concerned about.
The movie is filled with every plot device, prop and cheesy special effect that can possibly be crammed into one film. All with seemingly the same purpose -- the specific intent of making this film as cheesy as possible. These range from the space herpe that infects the ice pirate's ship. To the high-speed effects which are used when the ship hits a time warp. I'm not even going to bother getting into the robots that populate this film.
Actually commenting on the performances of this film seems pointless. Everyone in this movie seems to be giving 110% effort at making their performances as over the top as the possible as they can without actually breaking up laughing during a line of dialogue. Bad. Bad. Bad. Since that is what they were going for, they can be excused somewhat.
If there were one compliment that I could give The Ice Pirates, it would be that nobody would ever confuse it for a good movie. But I still had fun watching it again.
5/10
Visit The Movie Guy http://movieguy.tripod.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


-
Generation Nice - NYTimes.com
www.nytimes.com
Suddenly, as you may have noticed, millennials are everywhere. Not that this group of people born after 1980 and before 2000 — a giant cohort now ...
-
Why I am leaving the best job I ever had
maxschireson.com
Earlier this summer, Matt Lauer asked Mary Barra, the CEO of GM, whether she could balance the demands of being a mom and being a CEO. The Atlantic ...
-
Hacker News
hn.premii.com
Read Hacker News articles and comments with this clean, simple, modern looking and fast performing universal app.
-
2014 Internet Trends — Kleiner Perkins Caufield Byers
www.kpcb.com
Partnering with great entrepreneurs to build the next big thing.
-
2048 game
gabrielecirulli.github.io
Join the numbers and get to the 2048 tile! Careful: this game is extremely addictive!
-
Telerik Hackathon
www.telerik.com
App developers, mark your calendars for the Telerik Hackathon 2014 on October 17-19. Anyone and everyone with a cool mobile app idea, is welcome to ...
-
U.S. economy grew at fastest pace in 2Q in 2-1/2 years
video.foxbusiness.com
PNC Wealth Management chief investment strategist Bill Stone and Holland & Company chairman Mike Holland discuss the state of the economy.
-
Facebook Is Partnering With Stripe to Power "Buy" Button
recode.net
Stripe adds Facebook to its list of impressive partnership deals.
-
New $140 Million Early-Stage Fund Launched in Europe Called Mosaic Ventures
recode.net
Three well-known tech investors and execs announced today that they had launched Mosaic Ventures, a new $140 million fund aimed at early-stage ...
-
Is using Stripe in my iOS app within Apple’s Terms of Service? Will I need ...
support.stripe.com
Common searches: recurring payments , transfers , and refunds
-
Is the App Ecosystem Sustainable? | Tech.pinions - Perspective, Insight, ...
techpinions.com
The focus on mobility and mobile platforms as the growth engines for the tech industry’s future is now so engrained into most people’s heads that it ...
-
How Kleiner Perkins Invests in the Internet of Things – Picking the Winners
soundcloud.com
In this podcast, KPCB’s Mike Abbott, Wen Hsieh, and Rouz Jazayeri discuss the rapidly expanding Internet of Things (IoT), which has been predicted to ...
-
Mobile News App Circa Adds A Personalized Daily Digest Of The Day’s Top ...
techcrunch.com
Today, Circa is making it easier for news buffs to get the most important news of the day, while also being able to drill down into the topics and ...
-
Shonda Rhimes
www.makers.com
Stay up to date with the latest from MAKERS delivered straight to your inbox. Sign up for new stories from trailblazing women, a big dose of ...
-
Medicine 2064 with Dr. Daniel Kraft
www.youtube.com
Curing half of the world's known cancers, granting movement to the paralyzed, preventing Alzheimer's. Visionary medical expert Dr. Daniel Kraft ...
-
Stripe Lands Apple in Quest for $720 Billion in Payments - Bloomberg
www.bloomberg.com
Stripe Lands Apple in Quest for $720 Billion in Payments
-
An Early Investor Offers Some Lessons From Alibaba’s Evolution | TechCrunch
techcrunch.com
A co-founder of GGV Capital, one of Alibaba's earliest investors, reflects on the lessons other companies can take from how the e-commerce giant grew ...
-
The Next Big Thing In Responsive Design
www.fastcodesign.com
Responsive design has to go beyond optimizing for different screen sizes, write Code and Theory's Dan Gardner and Mike Treff.
-
Daniel Johnson's answer to What are the stupidest decisions ever made in ...
www.quora.com
Please confirm your email address. Resend Confirmation Link
-
CBS This Morning Video - Pattie Sellers, Fortune's senior editor at large, ...
www.cbs.com
Eight of the top 10 women on Fortune Magazine's list run industrial, tech and consumer product companies. Pattie Sellers, the magazine's senior ...
-
iTunes - Music - Tony Bennett
itunes.apple.com
Preview and download top songs and albums by Tony Bennett on the iTunes Store. Songs by Tony Bennett start at just 0,69 €.
-
Cheek to Cheek (Deluxe Version) by Tony Bennett & Lady Gaga
itunes.apple.com
Preview and download Cheek to Cheek (Deluxe Version) on iTunes. See ratings and read customer reviews.
-
Why I Hope to Die at 75
www.theatlantic.com
An argument that society and families—and you—will be better off if nature takes its course swiftly and promptly
-
Mobile Now Accounts for 50.3% of All Ecommerce Traffic – Shopify
www.shopify.com
A blog about ecommerce marketing, running an online business and updates to Shopify's ecommerce community.
-
How The Internet Killed Profit | TechCrunch
techcrunch.com
New eras in technology have always brought a fear of job losses and the devastation of legacy industries, but the Internet has taken us beyond ...
-
How giant websites design for you (and a billion others, too)
www.ted.com
Facebook’s “like” and “share” buttons are seen 22 billion times a day, making them some of the most-viewed design elements ever created. Margaret ...
-
Exclusive: Two Apple medical trials shed light on how HealthKit will work
www.reuters.com
SAN FRANCISCO (Reuters) - Two prominent U.S. hospitals are preparing to launch trials with diabetics and chronic disease patients using Apple Inc's ...


  That experience is a valuable
asset to your department when it comes to the rapid, economical
procurement of most any emergency fire equipment.
One Stop Fire Shop offers unique packages of equipment
making the purchasing process more convenient and more economical.
One Stop Fire Shop’s mission is to offer a one-stop source for
all rescue and fire fighting needs.


genes wall levels cell (Figure internode maize cellulose zone elongation gene transcript maturation transition Section transcription Plant elongating secondary synthesis CesA sections lignin Atg involved Figure transcripts Sections high MYB internode. low walls decreased lower analysis biosynthesis polysaccharide {border-style GAX microarray polysaccharides Arabidopsis Cell increased px;} #ffffff;} B). Transcript relatively showed zone, Physiol data patterns ZmCesA analyses enzymes family plant primary protein Cellulose crystalline developmental factors meristematic profiles synthase ./pp.. A). changes observed residues similar detected different increase xylan zones Fincher barley believed described factor generally implicated mRNA pattern zone. cellulose, file important internode, upper Lignin Sci Table abundance acid al.[ composition consistent data. expansion plants regions transcribed used AtCesA Bacic NAM Transcription backbone biological deposition enzyme genes, genes. major measured phosphorylation px; regulation synthesis, xyloglucan zones, {font-family (,;,)-β-glucan (,;,)-β-glucanase Burton However, MYB, XET Zhong abundant case development experimental families font-size members peak peaked previously re-modelling represented steadily sugar transcriptional using (Additional ./j.-X...x Agilent Biol Performed Pettolino Substantial Transcripts Zhang approximately basal cells compositions degradation design determined did double; encoding example, expression formation functions growth highly include included internodes non-cellulosic particular range remained residues, reveals shown stages stalk total transferase zones. (A) (Table Maize NAC-domain RNA S). Shirley Thus, UXS ZmCslA abrupt acetic affects border-color border-width calculated compared contribution degree elongation, estimated followed gene, glycosyl grasses group higher including kinases known linkage mediate metabolism method poplar quickly quite rate regulate right role sample sodium solid; steady substitution tissues tubes weight {font-style {font-weight (QBC) (data -fold ./tpc.. AtIRX Beatty Carpita CesA, CslA Dhugga Doblin GT, Genes Microarray Mol Natl Proc Somerville Taylor Updegraff Zhou [], according addition analyses. anisotropic approach biosynthesis, bold components concentration concentrations contents courier; deduced designated developing differences em; function hydrolysed increases indicated. individual intercalary kinase mannan maximal metabolic microarray. monitored new nucleotide number pathways physiology play pt;} pulvini putative regulates replicates revealed seen showing stage standard stress suggested synthases understanding uronic values various w/w work work, xyloglucans,


I'm a person who seeks perfection(though not perfect yet) in everything i love to do. Web development always amazes me, as it is kind of hot thing in the present world, along with that it poses several challenges. This website is an attempt to showcase all my work and experience as i progress in my endeavour. Along with that i will link each and every project i will work on in the future. This whole site has been designed using Twitter Bootstrap .


|
BSL430.NET
1.2.1
|
Contains information about a communications driver More...
Public Attributes | |
| ushort | wPacketLength |
| The size of the entire data packet, regardless of the amount of data requested, in bytes More... | |
| ushort | wPacketVersion |
| The version of the structure More... | |
| uint | dwServiceMask |
| A bit mask indicating which services are implemented by this provider. The SP_SERIALCOMM value is always specified for communications providers, including modem providers More... | |
| uint | dwMaxTxQueue |
| The maximum size of the driver's internal output buffer, in bytes. A value of zero indicates that no maximum value is imposed by the serial provider. More... | |
| uint | dwMaxRxQueue |
| The maximum size of the driver's internal input buffer, in bytes. A value of zero indicates that no maximum value is imposed by the serial provider More... | |
| BitVector32 | dwMaxBaud |
| The maximum allowable baud rate, in bits per second (bps) More... | |
| ProvSubType | dwProvSubType |
| The communications-provider type More... | |
| BitVector32 | dwProvCapabilities |
| A bit mask indicating the capabilities offered by the provider More... | |
| BitVector32 | dwSettableParams |
| The communications parameter that can be changed More... | |
| BitVector32 | dwSettableBaud |
| The baud rates that can be used More... | |
| BitVector32 | dwSettableDataStopParity |
| The number of data bits that can be set, stop and parity bits in the second half More... | |
| uint | dwCurrentTxQueue |
| The size of the driver's internal output buffer, in bytes. A value of zero indicates that the value is unavailable More... | |
| uint | dwCurrentRxQueue |
| The size of the driver's internal input buffer, in bytes. A value of zero indicates that the value is unavailable More... | |
| uint | dwProvSpec1 |
| Any provider-specific data More... | |
| uint | dwProvSpec2 |
| Any provider-specific data More... | |
| char | wcProvChar |
| Any provider-specific data More... | |
Contains information about a communications driver
| uint RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwCurrentRxQueue |
The size of the driver's internal input buffer, in bytes. A value of zero indicates that the value is unavailable
| uint RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwCurrentTxQueue |
The size of the driver's internal output buffer, in bytes. A value of zero indicates that the value is unavailable
| BitVector32 RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwMaxBaud |
The maximum allowable baud rate, in bits per second (bps)
| uint RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwMaxRxQueue |
The maximum size of the driver's internal input buffer, in bytes. A value of zero indicates that no maximum value is imposed by the serial provider
| uint RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwMaxTxQueue |
The maximum size of the driver's internal output buffer, in bytes. A value of zero indicates that no maximum value is imposed by the serial provider.
| BitVector32 RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwProvCapabilities |
A bit mask indicating the capabilities offered by the provider
| uint RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwProvSpec1 |
Any provider-specific data
Applications should ignore this member unless they have detailed information about the format of the data required by the provider. Set this member to COMMPROP_INITIALIZED before calling the GetCommProperties function to indicate that the wPacketLength member is already valid
| uint RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwProvSpec2 |
Any provider-specific data
Applications should ignore this member unless they have detailed information about the format of the data required by the provider.
| ProvSubType RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwProvSubType |
The communications-provider type
| uint RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwServiceMask |
A bit mask indicating which services are implemented by this provider. The SP_SERIALCOMM value is always specified for communications providers, including modem providers
| BitVector32 RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwSettableBaud |
The baud rates that can be used
| BitVector32 RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwSettableDataStopParity |
The number of data bits that can be set, stop and parity bits in the second half
| BitVector32 RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.dwSettableParams |
The communications parameter that can be changed
| char RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.wcProvChar |
Any provider-specific data
Applications should ignore this member unless they have detailed information about the format of the data required by the provider.
| ushort RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.wPacketLength |
The size of the entire data packet, regardless of the amount of data requested, in bytes
| ushort RJCP.IO.Ports.Native.Windows.NativeMethods.CommProp.wPacketVersion |
The version of the structure


Permanently deletes a page from the portal that had previously been deleted and sent to DNN's Recycle Bin.
| Flag | Value | Required | Default | Description |
|---|---|---|---|---|
| --id | integer | See Notes | Explicitly specifies the Page ID to purge. Use of the flag name is not required. You can simply provide the ID value as the first argument. Required if --parentid and --name are not specified. | |
| --name | string | See Notes | Specifies the name (not title) of the page that should be purged. This can be combined with --parentid to target a page name with a specific Parent page. Required if --parentid and --name are not specified. | |
| --parentid | string | See Notes | When you want to purge all child pages of a certain page, use this flag and specify the parent's Page ID. Required if --id and --name are not specified. |
purge-page 999
OR
purge-page --id 999
purge-page --name "Page1"
purge-page --parentid 999


--- layout: post title: if we dont remember me date: '2010-11-10T23:37:17+00:00' tags: [] tumblr_url: http://backlog.robbevan.com/post/1537570343/if-we-dont-remember-me ---
If we don’t, remember me.


class DuelMutableMap<LEFT, RIGHT> : HashMap<LEFT, RIGHT>
A simple HashMap implementation that makes usage of ReverseMutableMap in order to create a backwards-linkable map, where values on the LEFT can be used to fetch values on the RIGHT and vice-versa.
Author
Boston Vanseghi
Since
2.0.2
<init> |
A simple HashMap implementation that makes usage of ReverseMutableMap in order to create a backwards-linkable map, where values on the LEFT can be used to fetch values on the RIGHT and vice-versa. DuelMutableMap() |
getLeft |
fun getLeft(right: RIGHT): LEFT? |
getRight |
fun getRight(left: LEFT): RIGHT? |
putLeft |
fun putLeft(right: RIGHT, left: LEFT): LEFT? |
putRight |
fun putRight(left: LEFT, right: RIGHT): RIGHT? |


×
This section is not complete yet. Sorry for your inconvenience. Meanwhile, you can play with the randomize option.
slower
faster


http://phpsolmag.org/prt/view/nos-articles.html
PHP Solutions talk about PGDay 2009 on its website
http://www.ed-diamond.com/
GNU/Linux Magazine France talks about PGDay 2009 on this special edition