更新 R 表达式

yak*_*e84 3 r

我想换出用户编写的一些代码。这些表达式就像一个列表,但我不知道如何更新它们。我可以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 日创建

akr*_*run 7

一种选择是将其转换为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)