Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在省略号之前使用“not”运算符_R_Tidyverse - Fatal编程技术网

R 在省略号之前使用“not”运算符

R 在省略号之前使用“not”运算符,r,tidyverse,R,Tidyverse,我正在尝试使用一个函数!省略号前的逻辑运算符 下面是一个简单的例子: library(tidyverse) myfun <- function(data, ...) { filter(data, !(...)) } 该函数不工作,并引发以下错误: > myfun(iris, Sepal.Width < 4) Error: Problem with `filter()` input `..1`. x object 'Sepal.Width' not found ℹ Inp

我正在尝试使用一个函数!省略号前的逻辑运算符

下面是一个简单的例子:

library(tidyverse)

myfun <- function(data, ...) {
  filter(data, !(...))
}
该函数不工作,并引发以下错误:

> myfun(iris, Sepal.Width < 4)
Error: Problem with `filter()` input `..1`.
x object 'Sepal.Width' not found
ℹ Input `..1` is `!(...)`.
我怎样才能让它工作


请注意,出于我的目的,我必须否定myfun中的条件。

一个更好的选择可能是像往常一样简单地进行筛选,然后从原始数据集中删除筛选的行-例如,使用anti_join,如下所示:

myfun2 <- function(data, ...) {

discard <- filter(data, ...)
dplyr::anti_join(data, discard, by = colnames(discard))

}

更好的选择可能是像往常一样简单地进行筛选,然后从原始数据集中删除筛选的行-例如,使用anti_join,如下所示:

myfun2 <- function(data, ...) {

discard <- filter(data, ...)
dplyr::anti_join(data, discard, by = colnames(discard))

}

尝试执行以下操作

library(tidyverse)
library(data.table)

myfun <- function(data, param, argument) {
  filter(data, data[[param]] != argument)
}

iris1 = as.data.table(iris)
myfun(iris, param = "Species", argument = "setosa")

尝试执行以下操作

library(tidyverse)
library(data.table)

myfun <- function(data, param, argument) {
  filter(data, data[[param]] != argument)
}

iris1 = as.data.table(iris)
myfun(iris, param = "Species", argument = "setosa")
以下是rlang方法:

myfun <- function(data, ...) {
  x <- rlang::enquos(...)
  filter(data, !(!!!x))
}

myfun(iris, Sepal.Width < 4)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.8         4.0          1.2         0.2  setosa
2          5.7         4.4          1.5         0.4  setosa
3          5.2         4.1          1.5         0.1  setosa
4          5.5         4.2          1.4         0.2  setosa
以下是rlang方法:

myfun <- function(data, ...) {
  x <- rlang::enquos(...)
  filter(data, !(!!!x))
}

myfun(iris, Sepal.Width < 4)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.8         4.0          1.2         0.2  setosa
2          5.7         4.4          1.5         0.4  setosa
3          5.2         4.1          1.5         0.1  setosa
4          5.5         4.2          1.4         0.2  setosa

为什么要将data.table添加为依赖项?这在非常特定的情况下有效。但是,它比使用省略号灵活得多。默认情况下,tidyverse确实包含data.table。不需要特别包括data.table。我同意,在这种情况下使用省略号更有意义。为什么要添加data.table作为依赖项?这在非常特定的情况下会起作用。但是,它比使用省略号灵活得多。默认情况下,tidyverse确实包含data.table。不需要特别包括data.table。我同意,在这种情况下使用省略号更有意义。这是可行的,但@Ian Campbell的解决方案正是我想要的。这是可行的,但@Ian Campbell的解决方案正是我想要的。这太多了。对于我们这些很少使用tidyverse的人,你能详细介绍一下它的作用吗?我猜第一个on转换为逻辑,下一个反转,但在那之后?在这种情况下!!!是一个大爆炸算子,它强制表达了量子点的论点。更多信息,请参阅。太多了。对于我们这些很少使用tidyverse的人,你能详细介绍一下它的作用吗?我猜第一个on转换为逻辑,下一个反转,但在那之后?在这种情况下!!!是一个大爆炸算子,它强制表达了量子点的论点。有关更多信息,请参阅。