作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个使用 dplyr 计算 z 的所有唯一值的函数。当我有实际命名为 z 的变量时,我的函数工作正常。但是,如果变量名为 x,则会出现错误(在代码下方)。
test.data<-data.frame(y=c(1:10),
x=c(letters[1:10]))
test.data$x<-as.character(test.data$x)
obsfunction<-function(z,y,data){
filter_(data,
!is.na(deparse(substitute(y))))%>%
distinct_(., deparse(substitute(z)))%>% #the line that breaks it
count_(.)
}
obsfunction(z=x,y,data=test.data)
所以,上面的代码不起作用并给出了这个错误:
>Error in eval(substitute(expr), envir, enclos) : unknown column 'z'
在函数中将 z 更改为 x(或将 x 重命名为 z)使其有效,但我不想重命名所有内容,尤其是考虑到 y 可以使用不同的名称。
我已经根据 vignette 尝试过 lazyeval::interp 和 quote() , this question , 和 this question .
distinct_(lazyeval::interp(as.name(z)))%>%
>Error in as.name(z) : object 'x' not found
distinct_(quote(z))%>%
>Error in eval(substitute(expr), envir, enclos) : unknown column 'z'
我错过了什么?如何让 z 接受 x 作为列名?
最佳答案
作为 dplyr 标准评估理解字符串,我尝试了以下代码和额外的测试数据,它似乎有效。我首先提取变量名,然后使用字符串构造表达式:
test.data<-data.frame(y=c(1:10),
x=c(letters[1:10]))
test.data$x<-as.character(test.data$x)
f <- function(z, y, data){
z <- deparse(substitute(z))
y <- deparse(substitute(y))
res <- data %>% filter_(
paste('!is.na(', y, ')', sep = '')) %>%
distinct_(z) %>%
count_(.)
}
x <- f(z = x, y, test.data)
# # A tibble: 1 × 1
# n
# <int>
# 1 10
test.data <- data.frame(
y=c(1:4, NA, NA, 7:10),
x=c(letters[c(1:8, 8, 8)]),
stringsAsFactors = F)
x <- f(z = x, y, test.data)
# # A tibble: 1 × 1
# n
# <int>
# 1 6
关于r - 可以获得非标准评估以在 dplyr 中为 filter_ 和 count_ 但不是 distinct_ 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41189234/
我正在尝试编写一个使用 dplyr 计算 z 的所有唯一值的函数。当我有实际命名为 z 的变量时,我的函数工作正常。但是,如果变量名为 x,则会出现错误(在代码下方)。 test.data%
我是一名优秀的程序员,十分优秀!