簡體   English   中英

在parse()函數中使用lapply

[英]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_exprrlang

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM