1

我一直在尝试提取传递给 dplyr::mutate() 中的函数的变量的名称,但没有成功。下面是一个简短的示例,我想创建一个在 mutate 中返回字符串“mpg”的函数:

# mtcars dataset with grouping variable
dataset = mtcars
dataset$group = c(1, 2, 3, 4)

# function to call inside mutate()
f = function(col, data){
  str_col = deparse(lazyeval::expr_find(col))
  str_col
}

# this does not work: returns the content of mpg 
# instead of the variable name as a string
dataset %>%
  group_by(group) %>%
  mutate(f = f(mpg, dataset)
  ) %>%
  select(group, f)

我使用了lazyeval::expr_find(),因为就我对文档的理解而言,替换只“上升”了一层。当我在函数 wrap() 中调用 f() 时它可以工作,但是当我将它放在 group_by()%>%mutate() 中时它返回 mpg 的内容,而不是名称“mpg”

我发现了一些相关的问题,但没有一个能解决我的问题。

非常感谢任何帮助:)

4

1 回答 1

1

我仍然不完全清楚您要做什么,但这可能会有所帮助:

f = function(col, data){
  str_col = deparse(substitute(col))
  data.frame(str_col)
}

dataset %>% 
   group_by(group) %>% 
   do(f(mpg, .))
于 2017-03-10T22:29:59.303 回答