r dplyr transmute_ string输入错误

pFi*_*aux 8 r dplyr

给定一个数据帧和一个包含要对列执行的操作的字符串:

myDF <- as.data.frame(cbind(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4)))
myString <- 'Added = V1 + V2'
Run Code Online (Sandbox Code Playgroud)

调用'transmute_()'会给我想要的输出:

transmute_(myDF,myString)
Run Code Online (Sandbox Code Playgroud)

输出:

  Added = V1 + V2
1               2
2               4
3               6
4               8
Run Code Online (Sandbox Code Playgroud)

到目前为止很棒!但如果我立即重复相同的'transmute_()'函数,我会收到错误.

transmute_(myDF,myString)
Error: invalid (do_set) left-hand side to assignment
Run Code Online (Sandbox Code Playgroud)

更改输入字符串的列名称仍会产生相同的错误,并将相同的字符串存储在另一个变量中也是如此.但是,如果我更改新列名称,它将首次再次运行,然后出现错误(请参阅下面的示例).

我不知道为什么会这样.似乎输出的临时版本存储在某处,错误是对此的反应,但我以前从未遇到过这样的事情.任何帮助理解它并绕过它(除了显然重新命名新列)将不胜感激.

谢谢!

myString <- 'Added = V1 + V3'
transmute_(myDF,myString)
Error: invalid (do_set) left-hand side to assignment

myString2 <- 'Added = V1 + V3'
transmute_(myDF,myString2)
Error: invalid (do_set) left-hand side to assignment

myString2 <- 'Added_2 = V1 + V3'
transmute_(myDF,myString2)
  Added_2 = V1 + V3
1                 2
2                 4
3                 6
4                 8
Run Code Online (Sandbox Code Playgroud)

phi*_*ver 0

mutate_有同样的问题,但查看代码是因为 transmute_ 调用了 mutate_。这在 dplyr 中并不是一个严重的错误,但在 dplyr github 页面上提出了一个问题。请参阅github 问题 315

运行后transmute_(myDF,myString)可以看到Added基础环境中可用。只需键入它(或base::Added),您就会看到该对象和已创建的值。当您再次调用代码行时,这会导致问题。

有关更多详细信息,请阅读Romain Francois 和 Hadley Wickham对github 第 315 期的评论