我花了几个小时试图在公式的 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 上搜索词的所有点击,但目前没有任何效果。
非常感谢任何见解。谢谢你!
一年多以来,我一直在尝试为此找到解决方案,并决定写一篇关于它的文章。任何帮助,将不胜感激。这是我可以在 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 没有任何解决方法。 …