R模式中允许具有有限功能集的胶水?
我正在使用R模式中允许具有有限功能集的胶水?,r,dplyr,tidyverse,r-environment,r-glue,R,Dplyr,Tidyverse,R Environment,R Glue,我正在使用glue()格式化字符串。理想情况下,我想让用户选择提供自己的、可能很复杂的格式化模式。这些文件通常作为yaml配置文件的一部分分发,yaml配置文件还包含许多其他设置 library(glue) df <- tibble(a = c(70,80,90,4,5), conversionunit = c(60,60,60,1,1)) pattern <- "{a/conversionunit} minutes" # loaded from user's c
glue()
格式化字符串。理想情况下,我想让用户选择提供自己的、可能很复杂的格式化模式。这些文件通常作为yaml配置文件的一部分分发,yaml配置文件还包含许多其他设置
library(glue)
df <- tibble(a = c(70,80,90,4,5), conversionunit = c(60,60,60,1,1))
pattern <- "{a/conversionunit} minutes" # loaded from user's config file
df <- df %>% mutate(output = glue(pattern))
# more complex alternative
pattern <- "{round(a/conversionunit, digits=2)} minutes" # loaded from user's config file
df <- df %>% mutate(output = glue(pattern))
我知道glue\u safe
但是这比我想要的限制更大。理想情况下,我希望提供一个允许函数的列表
safe_fun <- list(`*` = `*`, `/` = `/`, "round" = round) %>% as.environment() # etc
safe_fun%as.environment()#等
并且只允许使用那些指定的。有什么方法可以做到这一点吗?在此基础上:
库(胶水)
图书馆(dplyr)
df在此基础上:
库(胶水)
图书馆(dplyr)
df定义保存数据和函数的环境,并将其父级设置为emptyenv()
库(胶水)
图书馆(tibble)#lst
safe\u fun定义保存数据和函数的环境,并将其父级设置为emptyenv()
库(胶水)
图书馆(tibble)#lst
也许会很安全
safe_fun <- list(`*` = `*`, `/` = `/`, "round" = round) %>% as.environment() # etc
library(glue)
library(tibble) # lst
safe_fun <- lst(`*`, `/`, round)
safe_env <- list2env(c(df, safe_fun), parent = emptyenv())
# test 1
glue("{a/conversionunit} minutes", .envir = safe_env)
## 1.16666666666667 minutes
## 1.33333333333333 minutes
## 1.5 minutes
## 4 minutes
## 5 minutes
# test 2
glue("{sqrt(a)/conversionunit} minutes", .envir = safe_env)
## Error in sqrt(a) : could not find function "sqrt"