I’m struggling to understand why does this doesn’t work.
df <- data.frame(a=1:10, b=1:10)
foo <- function(obj, col) {
with(obj, ls())
with(obj, print(col))
}
foo(df, a)
[1] “a” “b”
Error in print(col) : object ‘a’ not found
If this does work:
with(df, print(a))
withis handy and improves readability in an interactive context but can hurt your brain in a programming context where you are passing things back and forth to functions and dealing with things in different environments. In general within R, using symbols rather than names is a sort of “semantic sugar” that is convenient and readable in interactive use but mildly deprecated for programming [e.g.$,subset]). If you’re willing to compromise as far as using a name ("a") rather than a symbol (a) then I would suggest falling back to the simplerobj[[col]]rather than usingwithhere …So, as a self-contained answer:
If you wanted to allow for multiple columns (i.e. a character vector)
edit: refraining from using
subsetwith a function, at @hadley’s suggestion(this will print the answer as a data frame, even if a single column is selected, which may not be what you want).