【发布时间】:2017-09-19 20:39:11
【问题描述】:
我有一个大致遵循这个结构的函数:
TestFunc <- function(dat, point) {
if (!(point %in% c("NW", "SE", "SW")))
stop("point must be one of 'SW', 'SE', 'NW'")
point <- enquo(point)
return(dat %>% filter(point == !!point))
问题是当我包含值检查时出现以下错误:
Error in (function (x, strict = TRUE) :
the argument has already been evaluated
当我删除检查时,错误消失了。我怎样才能同时保留两者?
【问题讨论】:
-
你是如何调用这个函数的?您是否将
point作为未引用的表达式传递?使用带有示例输入数据的 reproducible example 帮助您更容易,因此我们可以尝试运行代码。 -
没有可重复示例的最佳猜测:将
enquo移到顶部,并在支票中使用!!point。 -
我认为您根本不需要
enquo,只需!!。如果您没有同名的变量和函数参数,我认为您根本不需要任何非标准的评估工具。 -
仅供参考,您的示例检查功能已经存在于基础 R 中;见
?match.arg。不过,我认为使用它并不能解决您的问题。 -
@MrFlick 我用引号传递它。不带引号传递会导致缺少对象错误。