小编ast*_*rch的帖子

在 R/Tidyeval 中的 RHS 上使用类胶水结构

我花了几个小时试图在公式的 RHS 上粘上胶水,但没有任何线索。这是一个简单的表示。

meta <- function(x, var, suffix){
  x<- x %>% mutate("{{var}}_{suffix}":= 5)
  
  x<- x %>% mutate("{{var}}_{suffix}_new":= {{var}} - "{{var}}_{suffix}")
  
  
}

x<- meta(mtcars, mpg, suf)

#Should be equivalent to

x<- mtcars %>% mutate(mpg_suf:= 5)

x<- x%>% mutate(mpg_suf_new:= mpg - mpg_suf)

#N: Tried /sf/ask/4929918241/ but none of the methods in it worked, unfortunately

Run Code Online (Sandbox Code Playgroud)

元函数给我“local_error_context(dots =dots,.index = i,mask = mask)中的错误:承诺已在评估中:递归默认参数引用或早期问题?”

浏览了 SO 上搜索词的所有点击,但目前没有任何效果。

非常感谢任何见解。谢谢你!

r tidyeval

2
推荐指数
1
解决办法
90
查看次数

在 R 中动态创建数据帧和变量名称,类似于 SAS 和 STATA 中的宏

一年多以来,我一直在尝试为此找到解决方案,并决定写一篇关于它的文章。任何帮助,将不胜感激。这是我可以在 Stata 和 SAS 中轻松完成的伪代码,但我不知道如何在 R 中完成。{} 是今年引入 dplyr 的类似胶水的运算符,因此我将其用作占位符对于使伪代码工作的运算符。

library(tidyverse)
var <- "mpg"
df_name <- "mtcars"

{df_name} %>% count({var})

{df_name}_1 <- {df_name} %>% mutate(., {var}_1={var}/2)

length({df_name}_1)
Run Code Online (Sandbox Code Playgroud)

应该导致

library(tidyverse)
var <- "mpg"
df_name <- "mtcars"

mtcars %>% count(mpg)

mtcars_1 <- mtcars %>% mutate(., mpg_1=mpg/2)

length(mtcars_1)
Run Code Online (Sandbox Code Playgroud)

在 Stata 中,我可以轻松地使用本地或全局宏,如下所示:

local df_name "mtcars"
Run Code Online (Sandbox Code Playgroud)

然后将其引用为“df_name”

在 SAS 中,我可以使用这样的全局宏来做到这一点:

 %LET df_name=mtcars;
Run Code Online (Sandbox Code Playgroud)

然后像&df_name一样引用它

请注意引用这些值在视觉上是多么容易——没有赋值、获取、括号、mget 等。

这两种方法都允许在数据集名称、函数、变量等中使用它们。极大地简化了我的代码并为我节省了大量时间。如何在 R 中以视觉简单的方式做到这一点?我的代码对于熟悉 Stata/SAS 的人来说应该是可读的(dplyr 在这方面很棒!)而且太多的 eval,将所有东西都包装在函数中,用括号赋值只会让他们放弃项目或迫使我改回SAS/Stata。

我尝试了 {{}}、!!、enquo、sym 和 NSE 的所有组合,但仍然不知道如何以视觉上简单的方式使其工作。在 dplyr 管道中,变量名称终于有了一些解决方法,但对于数据帧和基础 R 没有任何解决方法。 …

r dataframe dplyr nse tidyverse

0
推荐指数
1
解决办法
360
查看次数

标签 统计

r ×2

dataframe ×1

dplyr ×1

nse ×1

tidyeval ×1

tidyverse ×1