如何解决dplyr函数内部行为不一致
当我将其插入到函数中而不起作用时,而不是单独使用dplyr :: mutate函数,就会发生此问题!看:
10010000
这两个代码是相同的,但是结果却是出乎意料的:
library(tidyverse)
data1<-data.frame(a=c(1:2),x1=c(2:3))
fun <- function(df1,coldf1){
df1 %>% mutate(coldf1 = 1) %>% return()
}
fun(data1,"a")
data1 %>% mutate("a" = 1)
我知道相等的赋值有问题,并且left_join函数中也发生了同样的问题。这些东西有通用的解决方案吗?
解决方法
您无法使用dplyr
来做到这一点,dplyr
严重影响了“非标准评估”(NSE)。在您的函数内部,coldf1 = 1
会看到df1 %>% mutate(somethingnew = 3.1415)
并分配一个新列,就像您可以执行rlang
一样。
您需要使用:=
的转义机制(与fun <- function(df1,coldf1) {
df1 %>% mutate(!!coldf1 := 1)
}
data1
# a x1
# 1 1 2
# 2 2 3
fun(data1,"a")
# a x1
# 1 1 2
# 2 1 3
一起使用)...
fun <- function(df1,coldf1) { df1[[coldf1]] <- 1; df1; }
fun(data1,"a")
# a x1
# 1 1 2
# 2 1 3
或基本R:
"thothTest":{
"9876":[
"K"
],"5431":[
"A","L"
],"5123":[
"L"
]
}
(尽管我假设您的示例已简化,但可能并非如此简单)
无论如何,请查看“使用dplyr编程” https://dplyr.tidyverse.org/articles/programming.html。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。