R 将列名作为参数传递给管道语句

R 将列名作为参数传递给管道语句,r,R,我浏览了其他问题,知道在大多数情况下,我可以直接将列名作为字符串传递,然后使用d[,column]访问值。但是,我无法在使用管道语句的函数中使用它(该函数接受给定的列并将值舍入到最接近的20): 有什么建议吗 关于joran下面的回答:我如何才能在保持不变的列名之间添加作为参数传递的列名?quote有什么功能 例如 我相信这可以通过interp从lazyeval获得: library(dplyr) library(lazyeval) d <- data.frame(x = rnorm(1

我浏览了其他问题,知道在大多数情况下,我可以直接将列名作为字符串传递,然后使用d[,column]访问值。但是,我无法在使用管道语句的函数中使用它(该函数接受给定的列并将值舍入到最接近的20):

有什么建议吗

关于joran下面的回答:我如何才能在保持不变的列名之间添加作为参数传递的列名?quote有什么功能

例如


我相信这可以通过
interp
lazyeval获得:

library(dplyr)
library(lazyeval)

d <- data.frame(x = rnorm(10,300,20))
column <- "x"
> d %>%
    mutate_(time = interp(quote(plyr::round_any(var,20,f = floor)),
                                                var = as.name(column)))

          x time
1  299.8697  280
2  271.5919  260
3  298.2845  280
4  276.3756  260
5  312.3145  300
6  289.7780  280
7  305.9819  300
8  290.5856  280
9  306.8417  300
10 336.2645  320
库(dplyr)
图书馆(懒汉)
d%
变异(时间=interp(引号(plyr::round_any(var,20,f=floor)),
var=as.name(列)))
x时间
1  299.8697  280
2  271.5919  260
3  298.2845  280
4  276.3756  260
5  312.3145  300
6  289.7780  280
7  305.9819  300
8  290.5856  280
9  306.8417  300
10 336.2645  320

看看这个,谢谢!这很有效。接下来的问题(为了更好地理解interp是如何工作的——我应该如何向它添加另一列,以便该函数现在采用两个列名?(添加到上面的问题以进行格式设置)@石榴您的附加问题对于count,
column1%count(vars=c('y1',column1')没有多大意义
。它的工作原理不同。如果您阅读文档中的非标准评估小插曲,您会发现
quote
只是其中一个选项。我选择它是因为在这种情况下,调用另一个函数似乎最简单。
fun2 = function(d, column, column2) {
    d %>%
    mutate_(time = interp(quote(plyr::round_any(var,20,f = floor)),
                                            var = as.name(column))) %>%
    count_(CONSTANT_COL_NAME, interp(var, var=as.name(column2)), CONSTANT_COL_NAME2) #Line in question
}
library(dplyr)
library(lazyeval)

d <- data.frame(x = rnorm(10,300,20))
column <- "x"
> d %>%
    mutate_(time = interp(quote(plyr::round_any(var,20,f = floor)),
                                                var = as.name(column)))

          x time
1  299.8697  280
2  271.5919  260
3  298.2845  280
4  276.3756  260
5  312.3145  300
6  289.7780  280
7  305.9819  300
8  290.5856  280
9  306.8417  300
10 336.2645  320