dplyr:使用重命名重命名变量_
我正在尝试重命名链中的几个变量:dplyr:使用重命名重命名变量_,r,dplyr,gsub,R,Dplyr,Gsub,我正在尝试重命名链中的几个变量: df_foo = data_frame( a.a = 1:10, "b...b" = 1:10, "cc..d" = 1:10 ) df_foo %>% rename_( .dots = setNames( names(.), gsub("[[:punct:]]", "", names(.))) ) 这很好,但当其中一个变量的名称中有空格时: df_foo = data_frame( a.a =
df_foo = data_frame(
a.a = 1:10,
"b...b" = 1:10,
"cc..d" = 1:10
)
df_foo %>%
rename_(
.dots = setNames(
names(.),
gsub("[[:punct:]]", "", names(.)))
)
这很好,但当其中一个变量的名称中有空格时:
df_foo = data_frame(
a.a = 1:10,
"b...b" = 1:10,
"c c..d" = 1:10
)
df_foo %>%
rename_(
.dots = setNames(
names(.),
gsub("[[:punct:]]", "", names(.)))
)
我得到这个错误:
Error in parse(text = x) : <text>:1:3: unexpected symbol
1: c c..d
^
我没有得到一个错误。不知道这里发生了什么
现在在
dplyr
GH问题页面上提出了这个问题 一般来说:我强烈建议不要将变量名与空格连用。他们是一种痛苦,往往会造成更多的麻烦比他们的价值
下面是这个错误的原因
重命名
发送到dplyr:::重命名..data.frame
。该函数的第一行是:
dots <- lazyeval::all_dots(.dots, ...)
分析时出错(text=x)::1:3:意外符号
1:c.c..d
^
我不知道有什么解决方案,除了使用base进行这个简单的重命名。您愿意接受非dplyr解决方案吗?该软件包无法很好地处理变量名中的空格。@Hugh我想我已经有了非-dplyr解决方案,即直接在名称上运行
gsub
。我只想了解这里发生了什么。错误可以追溯到lazyeval::as.lazy('aa')
返回解析错误。由于dplyr
在内部严重依赖lazyeval
,这可能很难解决。@Axeman谢谢。我将在dplyr
issues页面上提出这个bug。如果你写下你对这个错误的分析,我会记下你的答案。我们可以更进一步:as.lazy.character
callslazy(parse(text=x)[[1]],env)
;而?parse
表示文本:字符向量。要分析的文本。元素被视为文件的行
ie.parse需要一个有效的R表达式,在这种情况下禁止使用空格。
dots <- lazyeval::all_dots(.dots, ...)
lazyeval:::as.lazy(names(df_foo)[2])
<lazy>
expr: b...b
env: <environment: base>
lazyeval:::as.lazy(names(df_foo)[3])
Error in parse(text = x) : <text>:1:3: unexpected symbol
1: c c..d
^