在tidyeval中包装模型时,如何更改公式参数的一部分?

你好

据我所知,当您要制作包装模型的函数时,有两种处理公式参数的方法。您可以将公式的字符串版本粘贴在一起:

library(tidyverse)
run_model1 <- function(df, dep_str, ...){
  groupers <- enquos(...)
  formula <- dep_str %>% str_c("~ cty") %>% as.formula()
  df %>%
    group_by(!!!groupers) %>%
    do(model = lm(formula, data = .))
}

或者您可以引用整个公式:

run_model2 <- function(df, formula, ...){
  groupers <- enquos(...)
  formula <- enexpr(formula)
  df %>%
    group_by(!!!groupers) %>%
    do(model = lm(!!formula, data = .))
}

实际上,这两者都允许我在更改公式中的变量的同时获得分组模型。

run_model1(mpg, "hwy", cyl)
#> Source: local data frame [4 x 2]
#> Groups: <by row>
#> 
#> # A tibble: 4 x 2
#>     cyl model   
#> * <int> <list>  
#> 1     4 <S3: lm>
#> 2     5 <S3: lm>
#> 3     6 <S3: lm>
#> 4     8 <S3: lm>
run_model2(mpg, hwy ~ cty, cyl)
#> Source: local data frame [4 x 2]
#> Groups: <by row>
#> 
#> # A tibble: 4 x 2
#>     cyl model   
#> * <int> <list>  
#> 1     4 <S3: lm>
#> 2     5 <S3: lm>
#> 3     6 <S3: lm>
#> 4     8 <S3: lm>

但是,第一种方法要求将引号和未引号的参数混合在一起,特别是如果我要访问符号版本以供以后使用时,效果尤其不好。第二个强迫我每次只提供一份,而每次都提供整个配方。

基本上,我如何获得一个带有这样参数的函数?

run_model3(mpg, hwy, cyl)
扎恰德

ensym() 应该让您捕获提供给该功能的符号。

ensym()ensyms()是的变体enexpr()enexprs()其检查所捕获的表达是字符串(它们转换为符号)或符号。如果提供了其他任何内容,则会引发错误。

资源

run_model3 <- function (df, dep_str, ...) {
  dep_str <- ensym(dep_str)
  groupers <- enquos(...)
  formula <- dep_str %>% str_c("~ cty") %>% as.formula()
  df %>%
    group_by(!!!groupers) %>%
    do(model = lm(formula, data = .))
}

> run_model3(mpg, hwy, cyl)
Source: local data frame [4 x 2]
Groups: <by row>

# A tibble: 4 x 2
    cyl model   
* <int> <list>  
1     4 <S3: lm>
2     5 <S3: lm>
3     6 <S3: lm>
4     8 <S3: lm>

在引用之前,我们甚至可以使用以下方法run_model1

> run_model3(mpg, "hwy", cyl)
Source: local data frame [4 x 2]
Groups: <by row>

# A tibble: 4 x 2
    cyl model   
* <int> <list>  
1     4 <S3: lm>
2     5 <S3: lm>
3     6 <S3: lm>
4     8 <S3: lm>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Excel在复制时弄乱了我的公式,如何停止停止更改其中一部分而不更改另一部分?

如何更新模型是集合的一部分

如何在使用mvvm模型时在zk中绑定字符串的一部分

如何仅更改状态的一部分?

当文件名是python中的变量时,如何更改文件名的一部分?

声明变量时如何仅解压缩参数包的一部分?

Ember.js:如何仅显示模板中的一部分模型?

如何在日志记录中过滤路径的一部分(不是参数)?

如何在pyqt5 qwebengineview中更改html的一部分

如何基于多个条件更改列的一部分中的值?

如何在javascript中更改json obj的一部分?

如何更改列中的字符串值,保存其中的一部分?

jQuery-如何更改链接中的属性href的一部分?

用常数值更改excel公式的一部分

制作TreeViewItem包装的一部分

公式查询的最后一部分

在公式的一部分中使用变量

从 saga 制作模板:在函数中包装 saga 的一部分

如何对UNIQUE ARRAY公式的一部分求和

获得 Keras 模型的一部分

从URL请求Rails模型的一部分

如何在 XAML 中迭代集合,其中集合是 c# 类中模型的一部分

nextflow:根据参数更改脚本的一部分

除非级联的一部分,否则如何防止从Django Admin中删除Django模型

如何复制ArrayList的一部分,更改并添加到同一ArrayList中?

Python的一部分,忽略了参数

将公式化的列值复制并粘贴到列中公式的一部分中

如何更改 URL 的一部分并使用列表中的项目替换 Python 中的地址?

仅提取框架更改的一部分