Background
- I would like to evaluate a set of R function with a package environment without attaching this package
- I would like to avoid using
package::
Example
Data
Given sample dummy data set:
# Data --------------------------------------------------------------------
tmpCSV <- tempfile(fileext = ".CSV", pattern = "mtcars_data_")
write.csv(x = mtcars[, 1:5], file = tmpCSV, row.names = FALSE)
# Confirm
# readLines(con = tmpCSV)[1]
Reading
library
I could read it with use of read_csv function offered within the readr package.
library(readr)
dta <- read_csv(
file = tmpCSV,
col_types = cols(
mpg = col_double(),
cyl = col_integer(),
disp = col_integer(),
hp = col_integer(),
drat = col_double()
)
)
readr::
It would be also possible to call readr:: functions directly:
# detach("package:readr", unload=TRUE)
dta <- readr::read_csv(
file = tmpCSV,
col_types = readr::cols(
mpg = readr::col_double(),
cyl = readr::col_integer(),
disp = readr::col_integer(),
hp = readr::col_integer(),
drat = readr::col_double()
)
)
Problem
I would like to arrive at the same results using eval/evalq (if possible). Desired syntax would resemble:
eval(expr = read_csv(
file = tmpCSV,
col_types = cols(
mpg = col_double(),
cyl = col_integer(),
disp = col_integer(),
hp = col_integer(),
drat = col_double()
)
),
# Naturally, the "" bit does not make sense
envir = "package::readr")
Expected error:
Error in
read_csv(file = tmpCSV, col_types = cols(mpg = col_double(),: could not find function"read_csv"
Notes
The task is mostly concerned with accessing package functions without loading package and without calling functions directly via :: and :::. Conceptual equivalent would be using with function and referring to data frame columns without $:
with(mtcars, t.test(disp ~ am))
better example:
with(mtcars, mpg[cyl == 8 & disp > 350])
with(data = asNamespace("dplyr"), expr = summarise(.data = mtcars, "mean_cyl" = mean(cyl)))- Konrad