给定一个数据帧和一个包含要对列执行的操作的字符串:
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)
mutate_有同样的问题,但查看代码是因为 transmute_ 调用了 mutate_。这在 dplyr 中并不是一个严重的错误,但在 dplyr github 页面上提出了一个问题。请参阅github 问题 315。
运行后transmute_(myDF,myString)可以看到Added基础环境中可用。只需键入它(或base::Added),您就会看到该对象和已创建的值。当您再次调用代码行时,这会导致问题。
有关更多详细信息,请阅读Romain Francois 和 Hadley Wickham对github 第 315 期的评论