如何在dplyr中使用NSE来引用一个变量?

亚伦离开堆栈溢出

我想编写一个在dplyr链中使用的函数,以按给定的变量排列分组的数据,然后检查该变量是否严格增加了整数(例如1,2,3,...)。为了澄清,我的意思是每个整数都按顺序排列,而不仅仅是增加整数。所以1,2,4,...应该失败。

最终的想法是这样,看起来像这样,并且如果每个组的x都不是1,2,3,...,则会提供一个错误。

d %>% group_by(group) %>% check(x) 

我已经编写了一个SE版本,该版本似乎可以正常工作,如下所示,但仍停留在NSE版本上。

check_ <- function(.data, var) {
  checkint <- function(x) { stopifnot(x == seq_along(x)) }
  do(.data, {
    . <- dplyr::arrange_(., var)
    checkint(lazyeval::lazy_eval(var, data=.))
    .
  })
}

在文档中,看起来我应该使用它lazy来处理单个变量,但是当我要传递的变量也存在于全局环境中时,这将无法正常工作。

checkX <- function(.data, var) {
  check_(.data, lazyeval::lazy(var))
}

d <- expand.grid(group=1:2, x=3:1)
x <- 5 ## put an "x" in the global environment
d %>% group_by(group) %>% checkX(x)

## Error: incorrect size (1), expecting : 3 

我确实有一个NSE版本,似乎可以正常使用,但是调用lazy_dots感觉不对,因为我只想要一个变量。

check <- function(.data, ...) {
  check_(.data, lazyeval::lazy_dots(...)[[1]])
}
弗里克先生

看起来lazyeval一直在变化。最新的小插曲甚至没有引用lazy()函数。它似乎在范围上存在变量问题(更多内容在底部)。现在,我们的功能受到了鼓舞,尽管它们还没有进入所有的“ tidyverse”中。

看起来您想要的功能是expr_find如果我们定义checkX

checkX <- function(.data, var) {
  check_(.data, lazyeval::expr_find(var))
}

这样就可以了

x <- 5
d %>% group_by(group) %>% checkX(x)

(或至少与lazyeval_0.2.0和一起使用dplyr_0.5.0

但是从旧的小插图回到第一个例子

library(lazyeval)
# `x` does not exist here
f <- function(x = a - b) {
  lazy(x)
}
f()
# <lazy>
#   expr: a - b
#   env:  <environment: 0x000000000663d618>
exists("x")
# [1] FALSE
f(x)
# <lazy>
#   expr: x
#   env:  <environment: R_GlobalEnv>
x <- 101
f(x)
# <lazy>
#   expr: 101
#   env:  <environment: R_GlobalEnv>

或另一个更简单的例子

# rm(x)
lazy(x)
# <lazy>
#   expr: x
#   env:  <environment: R_GlobalEnv>
x <- 100
lazy(x)
#  <lazy>
#   expr: 100
#   env:  <environment: R_GlobalEnv>

它在某处评估参数x,因此如果它存在于来自其的环境中,则永远不会将其保存在惰性对象中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在角度中使用另一个变量来分配一个严格的数据类型变量值?

来自分类Dev

一个人如何在Docker中使用DNS来引用同一DN引用所有复制的容器?

来自分类Dev

如何在一个类中使用一个类检索变量数据。#Android

来自分类Dev

如何在另一个变量中使用变量

来自分类Dev

如何在Azure DevOps中的另一个变量中使用变量

来自分类Dev

如何在另一个变量的名称中使用shell变量的扩展值?

来自分类Dev

如何在EEx中的<%= render ...%>中使用另一个变量中的变量

来自分类Dev

我如何在CSS中使用*来选择所有但仅一个

来自分类Dev

如何在Kubernetes的pod定义中使用/ dev / console来显示一个容器?

来自分类Dev

如何在函数内定义变量并使用它来调用另一个函数

来自分类Dev

如何在一个文件中引用一个变量,并能够跨多个文件使用?

来自分类Dev

如何在 Java 中使用来自另一个包的 OSGI 引用

来自分类Dev

如何在一个循环中使用两个变量

来自分类Dev

如何在另一个函数中使用一个函数的局部定义变量?

来自分类Dev

如何在另一个函数中使用来自另一个函数的变量?

来自分类Dev

Visual Basic-如何在另一个函数中使用一个变量

来自分类Dev

如何在另一个文件中的一个js文件中使用变量?

来自分类Dev

如何在C中的另一个函数中使用局部变量的值

来自分类Dev

如何在另一个函数中使用函数变量值?

来自分类常见问题

如何在另一个Java类的Java方法中使用变量值?

来自分类Dev

如何在R中使用tidyverse按组创建一个变量的值组合

来自分类Dev

Python:如何在其他函数中使用一个函数中的命名变量

来自分类Dev

如何在另一个会话中使用变量(Powershell ISE选项卡)?

来自分类Dev

如何在车把中使用另一个变量指定对象键

来自分类Dev

如何在C ++的另一个作用域中使用局部变量?

来自分类Dev

如何在另一个函数中使用useEffect()中声明的变量?

来自分类Dev

如何在另一个组件的已绑定onClick事件中使用更新的变量?

来自分类Dev

如何在其他类中使用一个类中的变量?

来自分类Dev

如何在另一个函数PHP中使用变量

Related 相关文章

  1. 1

    如何在角度中使用另一个变量来分配一个严格的数据类型变量值?

  2. 2

    一个人如何在Docker中使用DNS来引用同一DN引用所有复制的容器?

  3. 3

    如何在一个类中使用一个类检索变量数据。#Android

  4. 4

    如何在另一个变量中使用变量

  5. 5

    如何在Azure DevOps中的另一个变量中使用变量

  6. 6

    如何在另一个变量的名称中使用shell变量的扩展值?

  7. 7

    如何在EEx中的<%= render ...%>中使用另一个变量中的变量

  8. 8

    我如何在CSS中使用*来选择所有但仅一个

  9. 9

    如何在Kubernetes的pod定义中使用/ dev / console来显示一个容器?

  10. 10

    如何在函数内定义变量并使用它来调用另一个函数

  11. 11

    如何在一个文件中引用一个变量,并能够跨多个文件使用?

  12. 12

    如何在 Java 中使用来自另一个包的 OSGI 引用

  13. 13

    如何在一个循环中使用两个变量

  14. 14

    如何在另一个函数中使用一个函数的局部定义变量?

  15. 15

    如何在另一个函数中使用来自另一个函数的变量?

  16. 16

    Visual Basic-如何在另一个函数中使用一个变量

  17. 17

    如何在另一个文件中的一个js文件中使用变量?

  18. 18

    如何在C中的另一个函数中使用局部变量的值

  19. 19

    如何在另一个函数中使用函数变量值?

  20. 20

    如何在另一个Java类的Java方法中使用变量值?

  21. 21

    如何在R中使用tidyverse按组创建一个变量的值组合

  22. 22

    Python:如何在其他函数中使用一个函数中的命名变量

  23. 23

    如何在另一个会话中使用变量(Powershell ISE选项卡)?

  24. 24

    如何在车把中使用另一个变量指定对象键

  25. 25

    如何在C ++的另一个作用域中使用局部变量?

  26. 26

    如何在另一个函数中使用useEffect()中声明的变量?

  27. 27

    如何在另一个组件的已绑定onClick事件中使用更新的变量?

  28. 28

    如何在其他类中使用一个类中的变量?

  29. 29

    如何在另一个函数PHP中使用变量

热门标签

归档