我希望library(ggplot2)
argList <- list(c("mpg"), "manufacturer == \"audi\" ", "year > 2002")
argList <- lapply(argList, FUN = parse, text = argList)
data <- do.call(filter, argList)
使用lapply通过条件列表,然后能够将它们用作数据集的过滤器。以此为例:
parse()
text = " "
函数为输入采用lapply()
参数,表示要解析的字符串。我无法让lapply(argList, FUN = parse, text = argList)
使用列表中的每个元素而不是整个列表。
的确,[[1]]
expression(mpg, manufacturer == "audi", year > 2002)
[[2]]
expression(mpg, manufacturer == "audi", year > 2002)
[[3]]
expression(mpg, manufacturer == "audi", year > 2002)
会返回
[[1]]
mpg
[[2]]
manufacturer == "audi"
[[3]]
year > 2002
而不是
{{1}}
答案 0 :(得分:2)
那是因为您将整个argList
传递给parse()
而没有使用通过lapply
传递的值。此外,您还需要取消装入表达式才能接听电话。尝试
argList <- lapply(argList, FUN = function(x) parse(text=x)[[1]])
argList
# [[1]]
# mpg
#
# [[2]]
# manufacturer == "audi"
#
# [[3]]
# year > 2002
答案 1 :(得分:1)
我们也可以使用parse_expr
rlang
library(tidyverse)
library(rlang)
do.call(filter, map(argList, parse_expr))
# A tibble: 9 x 11
# manufacturer model displ year cyl trans drv cty hwy fl class
# <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
#1 audi a4 2 2008 4 manu… f 20 31 p comp…
#2 audi a4 2 2008 4 auto… f 21 30 p comp…
#3 audi a4 3.1 2008 6 auto… f 18 27 p comp…
#4 audi a4 quattro 2 2008 4 manu… 4 20 28 p comp…
#5 audi a4 quattro 2 2008 4 auto… 4 19 27 p comp…
#6 audi a4 quattro 3.1 2008 6 auto… 4 17 25 p comp…
#7 audi a4 quattro 3.1 2008 6 manu… 4 15 25 p comp…
#8 audi a6 quattro 3.1 2008 6 auto… 4 17 25 p mids…
#9 audi a6 quattro 4.2 2008 8 auto… 4 16 23 p mids…
argList <- list(c("mpg"), "manufacturer == \"audi\" ", "year > 2002")