我想换出用户编写的一些代码。这些表达式就像一个列表,但我不知道如何更新它们。我可以append(),但不行replace()。
orig_code <-
parse(text =
"library(tidyverse)
list_1 <- list(a = 1, b = 2)"
)
new_code <- parse(text = "list_1 <- list(a = 1:3)")
# I can append
append(
x = orig_code,
values = new_code
)
#> expression(
#> library(tidyverse),
#> list_1 <- list(a = 1, b = 2),
#> list_1 <- list(a = 1:3)
#> )
# but not replace
replace(
x = orig_code,
list = 2,
values = new_code
)
#> expression(
#> library(tidyverse),
#> list_1 <- list(a = 1, b = 2)
#> )
# or reassign
orig_code[[2]] <- new_code
orig_code
#> expression(
#> library(tidyverse),
#> list_1 <- list(a = 1, b = 2)
#> )
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2020 年 7 月 5 日创建
一种选择是将其转换为list,然后进行replace修改,然后将其更改为expression
as.expression(c(replace(
x = as.list(orig_code),
list = 2,
values = as.list(new_code
))))
#expression(library(tidyverse), list_1 <- list(a = 1:3))
Run Code Online (Sandbox Code Playgroud)