在解析R
脚本以标记管道调用中的任何对象时,有没有办法,%>%
还是+.gg
?
在示例中我如何知道管道呼叫中的对象是什么?
path <- tempfile(fileext = '.R')
script <- 'myfun <- function(x){
ret <- mtcars%>%
mutate(mpg2=mpg*x)
ret <- ret%>%
dplyr::mutate(mpg3=mpg2^2)
}'
cat(script,file = path,sep='\n')
p <- parse(path)
print(utils::getParseData(p))
#> line1 col1 line2 col2 id parent token terminal text
#> 78 1 1 9 1 78 0 expr FALSE
#> 1 1 1 1 5 1 3 SYMBOL TRUE myfun
#> 3 1 1 1 5 3 78 expr FALSE
#> 2 1 7 1 8 2 78 LEFT_ASSIGN TRUE <-
#> 77 1 10 9 1 77 78 expr FALSE
#> 4 1 10 1 17 4 77 FUNCTION TRUE function
#> 5 1 18 1 18 5 77 '(' TRUE (
#> 6 1 19 1 19 6 77 SYMBOL_FORMALS TRUE x
#> 7 1 20 1 20 7 77 ')' TRUE )
#> 74 1 21 9 1 74 77 expr FALSE
#> 9 1 21 1 21 9 74 '{' TRUE {
#> 36 3 3 4 22 36 74 expr FALSE
#> 12 3 3 3 5 12 14 SYMBOL TRUE ret
#> 14 3 3 3 5 14 36 expr FALSE
#> 13 3 7 3 8 13 36 LEFT_ASSIGN TRUE <-
#> 35 3 10 4 22 35 36 expr FALSE
#> 15 3 10 3 15 15 17 SYMBOL TRUE mtcars
#> 17 3 10 3 15 17 35 expr FALSE
#> 16 3 16 3 18 16 35 SPECIAL TRUE %>%
#> 33 4 5 4 22 33 35 expr FALSE
#> 19 4 5 4 10 19 21 SYMBOL_FUNCTION_CALL TRUE mutate
#> 21 4 5 4 10 21 33 expr FALSE
#> 20 4 11 4 11 20 33 '(' TRUE (
#> 22 4 12 4 15 22 33 SYMBOL_SUB TRUE mpg2
#> 23 4 16 4 16 23 33 EQ_SUB TRUE =
#> 30 4 17 4 21 30 33 expr FALSE
#> 24 4 17 4 19 24 26 SYMBOL TRUE mpg
#> 26 4 17 4 19 26 30 expr FALSE
#> 25 4 20 4 20 25 30 '*' TRUE *
#> 27 4 21 4 21 27 29 SYMBOL TRUE x
#> 29 4 21 4 21 29 30 expr FALSE
#> 28 4 22 4 22 28 33 ')' TRUE )
#> 67 6 3 7 30 67 74 expr FALSE
#> 41 6 3 6 5 41 43 SYMBOL TRUE ret
#> 43 6 3 6 5 43 67 expr FALSE
#> 42 6 7 6 8 42 67 LEFT_ASSIGN TRUE <-
#> 66 6 10 7 30 66 67 expr FALSE
#> 44 6 10 6 12 44 46 SYMBOL TRUE ret
#> 46 6 10 6 12 46 66 expr FALSE
#> 45 6 13 6 15 45 66 SPECIAL TRUE %>%
#> 64 7 5 7 30 64 66 expr FALSE
#> 51 7 5 7 17 51 64 expr FALSE
#> 48 7 5 7 9 48 51 SYMBOL_PACKAGE TRUE dplyr
#> 49 7 10 7 11 49 51 NS_GET TRUE ::
#> 50 7 12 7 17 50 51 SYMBOL_FUNCTION_CALL TRUE mutate
#> 52 7 18 7 18 52 64 '(' TRUE (
#> 53 7 19 7 22 53 64 SYMBOL_SUB TRUE mpg3
#> 54 7 23 7 23 54 64 EQ_SUB TRUE =
#> 61 7 24 7 29 61 64 expr FALSE
#> 55 7 24 7 27 55 57 SYMBOL TRUE mpg2
#> 57 7 24 7 27 57 61 expr FALSE
#> 56 7 28 7 28 56 61 '^' TRUE ^
#> 58 7 29 7 29 58 59 NUM_CONST TRUE 2
#> 59 7 29 7 29 59 61 expr FALSE
#> 60 7 30 7 30 60 64 ')' TRUE )
#> 72 9 1 9 1 72 74 '}' TRUE }
由reprex package(v0.2.0)创建于2018-05-07。