如何在dplyr中对嵌套函数使用标准求值

如何在dplyr中对嵌套函数使用标准求值,r,dplyr,R,Dplyr,在数据帧中,我希望有一个列,其中的数字是从另一列中提取的,该列的名称仅作为变量给出: > name <- 'x' > df <- data.frame(x = '01abc78') > mutate_(df, number = as.numeric(substr(name, 6, 7))) 奇怪的是 > mutate_(df, number = substr(name, 6, 7)) 抛出一个错误: Error in parse(text = x)[[1]

在数据帧中,我希望有一个列,其中的数字是从另一列中提取的,该列的名称仅作为变量给出:

> name <- 'x'
> df <- data.frame(x = '01abc78')
> mutate_(df, number = as.numeric(substr(name, 6, 7)))
奇怪的是

> mutate_(df, number = substr(name, 6, 7))
抛出一个错误:

Error in parse(text = x)[[1]] : subscript out of bounds
只有

工作,但做一件不同的事情。此外,get()不是解决方案:

> mutate(df, number = as.numeric(substr(get(name), 6, 7)))
Error: object 'x' not found
我当然可以

mutate_(df, number = name) %>% mutate(number = as.numeric(substr(number, 6, 7)
但它确实不漂亮


我怎样才能解决这个问题,使其只使用mutate_uu或get()?

我们可以使用
rlang::sym
将其转换为
symbol
,然后使用
以对其进行评估

df %>%
   mutate(number = substr(!! rlang::sym(name), 6, 7))
#        x number
#1 01abc78     78
使用粘贴可以有所帮助

dots = paste0("as.numeric(substr(",name,", 6, 7) )")
mutate_(df, .dots = setNames(dots,"number"))

您正在使用哪个版本?
mutate(df,number=substr(get(name),6,7))
在dplyr_0.7.4更新为0.7.4的情况下适用于我:是的,现在该版本可以工作了。非常感谢。我真傻。。我发现仍然奇怪的是,mutate_uu版本的行为取决于嵌套函数。我直觉地认为,如果'substr(number,6,7)'抛出错误,那么'as.numeric(substr(number,6,7))'也无法执行。
df %>%
   mutate(number = substr(!! rlang::sym(name), 6, 7))
#        x number
#1 01abc78     78
dots = paste0("as.numeric(substr(",name,", 6, 7) )")
mutate_(df, .dots = setNames(dots,"number"))