R mutate()试图在使用美元符号运算符时使用全局变量的值进行提取
当全局环境中碰巧有一个变量与被提取的元素同名时,我使用R mutate()试图在使用美元符号运算符时使用全局变量的值进行提取,r,dplyr,R,Dplyr,当全局环境中碰巧有一个变量与被提取的元素同名时,我使用mutate和$提取得到了有趣的结果。(我正在运行R3.1.3和dplyr 0.4.3.9。)这工作正常: library(dplyr) df <- data.frame(time = 1:5, val = c(2.3, 3.9, NA, 8.1, 9.6)) mutate(df, val = approx(time, val, time)$y) # time val # 1 1 2.3 # 2 2 3.9 # 3
mutate
和$
提取得到了有趣的结果。(我正在运行R3.1.3和dplyr 0.4.3.9。)这工作正常:
library(dplyr)
df <- data.frame(time = 1:5, val = c(2.3, 3.9, NA, 8.1, 9.6))
mutate(df, val = approx(time, val, time)$y)
# time val
# 1 1 2.3
# 2 2 3.9
# 3 3 6.0
# 4 4 8.1
# 5 5 9.6
请注意,使用带字符串参数的双括号仍然可以正常工作:
mutate(df, val = approx(time, val, time)[['y']])
# time val
# 1 1 2.3
# 2 2 3.9
# 3 3 6.0
# 4 4 8.1
# 5 5 9.6
有趣的是,如果y
是一个字符,我们会得到不同类型的错误:
y <- 'a'
mutate(df, val = approx(time, val, time)$y)
# Error: unsupported type for column 'val' (NILSXP, classes = NULL)
正如@clbieganek指出的,这是一个bug。它尚未修复(从dplyr版本4.3开始) 评论中建议的可能修复方法:
$'y'
这是跟踪此一般问题的问题:
看起来像个虫子。您可以使用
$'y'
,但这只是一种黑客行为。我会提交一份报告。双括号提取似乎是一个非常合理的解决方法。你也可以做这个看起来很有趣的事情:mutate(df,val=`$`(大约(time,val,time),“y”)
实际上,看起来有人在六天前提交了这个bug:
y <- 'a'
mutate(df, val = approx(time, val, time)$y)
# Error: unsupported type for column 'val' (NILSXP, classes = NULL)
l <- list(y = 1:4)
y <- 'a'
l$y
# [1] 1 2 3 4