【发布时间】:2018-09-25 22:29:15
【问题描述】:
背景
- 我想评估一组带有包环境的 R 函数不附加此包
- 我想避免使用
package::
示例
数据
给定样本虚拟数据集:
# Data --------------------------------------------------------------------
tmpCSV <- tempfile(fileext = ".CSV", pattern = "mtcars_data_")
write.csv(x = mtcars[, 1:5], file = tmpCSV, row.names = FALSE)
# Confirm
# readLines(con = tmpCSV)[1]
阅读
library
我可以使用readr 包中提供的read_csv 函数来阅读它。
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::
也可以直接调用readr::函数:
# 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()
)
)
问题
我想使用eval/evalq(如果可能的话)获得相同的结果。所需的语法类似于:
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")
预期错误:
read_csv(file = tmpCSV, col_types = cols(mpg = col_double(),中的错误:找不到函数"read_csv"
注意事项
该任务主要涉及访问包函数加载包和不直接通过::和@调用函数987654337@。概念上的等价物是使用with 函数并引用没有$ 的数据框列:
with(mtcars, t.test(disp ~ am))
更好的例子:
with(mtcars, mpg[cyl == 8 & disp > 350])
【问题讨论】:
-
你不能想出一个不需要安装巨大的 BH 包的例子吗?
-
@Roland 是的:
with(data = asNamespace("dplyr"), expr = summarise(.data = mtcars, "mean_cyl" = mean(cyl)))
标签: r function namespaces eval packages