How to avoid a loop in R: selecting items from a list
list, r, strsplit, vector
Solution
You can use `apply` (or `sapply`)
t <- c("bob_smith","mary_jane","jose_chung","michael_marx","charlie_ivan")
f <- function(s) strsplit(s, "_")[[1]][1]
sapply(t, f)
bob_smith mary_jane jose_chung michael_marx charlie_ivan
"bob" "mary" "jose" "michael" "charlie"
See: A brief introduction to “apply” in R
Problem
I could solve this using loops, but I am trying think in vectors so my code will be more R-esque. I have a list of names. The format is firstname_lastname. I want to get out of this list a separate list with only the first names. I can't seem to get my mind around how to do this. Here's some example data: ``` t <- c("bob_smith","mary_jane","jose_chung","michael_marx","charlie_ivan") tsplit <- strsplit(t,"_") ``` which looks like this: ``` > tsplit [[1]] [1] "bob" "smith" [[2]] [1] "mary" "jane" [[3]] [1] "jose" "chung" [[4]] [1] "michael" "marx" [[5]] [1] "charlie" "ivan" ``` I could get out what I want using loops like this: ``` for (i in 1:length(tsplit)){ if (i==1) {t_out <- tsplit[[i]][1]} else{t_out <- append(t_out, tsplit[[i]][1])} } ``` which would give me this: ``` t_out [1] "bob" "mary" "jose" "michael" "charlie" ``` So how can I do this without loops?