当前位置: 首页 > 知识库问答 >
问题:

在自定义构建函数中使用复合调用变量dplyr(!!paste0,{{}},as.name(),eval(parse(text=)

微生宝
2023-03-14

这是下列问题的延伸:(1)、(2)和Mario Reutter在对(2)的评论中提出的问题。

library(dplyr, tidyverse)
string <- c("car", "train", 'bike', 'plain')
speed1 <- runif(4, min = 0, max = 10000)
speed2 <- runif(4, min = 0, max = 10000)
n1  <- sample(1:100, 4)
n1_plus  <- sample(1:100, 4)
n1_minus <- sample(1:100, 4)
n2  <- sample(1:100, 4)
df <- data.frame(string, speed1, speed2, n1, n2, n1_plus, n1_minus)

由于Akrun的回答,我可以构建以下函数:

my_fun <- function(dataf, V1, V2){
dataf %>%
dplyr::mutate("{{V1}}_{{V2}}" := paste0(format({{V1}}, big.mark   = ",") ,
  '\n(' , format({{V2}}, big.mark   = ",") , ')'))}

df<-df%>%my_fun(speed1, n1)
my_fun <- function(dataf, V1, V2){
dataf %>%
dplyr::mutate("{{V1}}_{{V2}}_plus" := paste0(format({{V1}}, big.mark   = ",") ,
  '\n(' , format('{{V2}}_plus', big.mark   = ",") , ')'))}

df<-df%>%my_fun(speed1, n1)
  string   speed1   speed2 n1 n2 n1_plus n1_minus       speed1_n1_plus
1    car 3958.415 1049.172 70 91      25       53 3,958.415\n(25)
2  train 6203.919 8639.160 52 92      14       91 6,203.919\n(14)
3   bike 2966.391 2997.303 35 55      46       61 2,966.391\n(46)
4  plain 2755.266 1627.379 98 66       8       49 2,755.266\n( 8)

共有1个答案

闻深
2023-03-14
my_fun <- function(dataf, V1, V2){
           dataf %>%
              dplyr::mutate("{{V1}}_{{V2}}_plus" := paste0(format({{V1}}, big.mark   = ","),
                  "\n(", format(!! rlang::sym(paste0(rlang::as_string(ensym(V2)), "_plus")), big.mark  = ","), ")"))}

-测试

df %>%
  my_fun(speed1, n1)
 string   speed1    speed2 n1 n2 n1_plus n1_minus  speed1_n1_plus
1    car 4453.441 3336.7287 92 97      28       56 4,453.441\n(28)
2  train 7718.381  638.5120 82 61       9       13 7,718.381\n( 9)
3   bike 4648.093 4267.8390  7 92      83       29 4,648.093\n(83)
4  plain 3815.145  793.6886 18 56      30       46 3,815.145\n(30)
 类似资料:
  • 问题内容: 当我尝试使用var定义变量时,一切正常。 但是将其定义为const不能按预期工作,并且该变量未定义。 我已经在Chrome和Node.js上对其进行了测试。我想念什么吗? 先感谢您! 问题答案: 在 eval 代码中使用 let 和 const 不会调用严格模式。 let 和 const 是 lexicalDeclarations ,将它们的范围限制为封闭的词法范围。 __ __ 词法

  • 问题内容: 我想使用变量来动态命名一些函数,如下所示: 我知道我可以使用这样的变量来 调用 函数: 但是最重​​要的例子对我不起作用。 有任何想法吗? 我正在使用具有模块的系统。每个模块都是单个php脚本,可以从特定文件夹中添加或删除。 每个模块都需要一个新功能来对其进行初始化。我正在寻找文件名,然后想循环并创建一系列功能,每个模块一个。 我使用的是现有系统,无法重写模块处理。 替代方法是只写出所

  • 问题内容: 熊猫帮助文件说(用于eval): 为方便起见,可以使用多行字符串来执行多个分配。 但是,我发现这不适用于变量(使用ipython): 这有效: 但这不起作用(op,cl,hi,lo是数据帧df_price中的cols,其中mult是一个浮点数): 错误: pandas.computation.ops.UndefinedVariableError : 未定义局部变量“ mult” 问题答

  • $this->db->call_function(); 这个方法用于执行一些 CodeIgniter 中没有定义的 PHP 数据库函数,而且 使用了一种平台独立的方式。举个例子,假设你要调用 mysql_get_client_info() 函数,这个函数 CodeIgniter 并不是原生支持的,你可以这样做: $this->db->call_function('get_client_info')

  • 本文向大家介绍Python使用自定义全局变量使用eval评估表达式,包括了Python使用自定义全局变量使用eval评估表达式的使用技巧和注意事项,需要的朋友参考一下 示例 此外,此代码不能偶然引用外部定义的名称: defaultdict例如,使用可以将未定义的变量设置为零:            

  • 找到价格最高和最低的信息: mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE [email protected]_price OR [email protected]_price; +---------+--------+-------+ |