[英]Using lapply with parse() function
我想使用lapply parse()
條件列表,然后將其用作數據集的過濾器。 例如考慮:
library(ggplot2)
argList <- list(c("mpg"), "manufacturer == \"audi\" ", "year > 2002")
argList <- lapply(argList, FUN = parse, text = argList)
data <- do.call(filter, argList)
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
那是因為您argList
整個argList
傳遞給parse()
而不是使用通過lapply
傳遞的值。 另外,您還需要對表達式進行拆箱以獲取呼叫。 嘗試
argList <- lapply(argList, FUN = function(x) parse(text=x)[[1]])
argList
# [[1]]
# mpg
#
# [[2]]
# manufacturer == "audi"
#
# [[3]]
# year > 2002
我們也可以使用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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.