【发布时间】:2017-01-29 12:52:33
【问题描述】:
我正在尝试重命名链中的几个变量:
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
^
自从我直接运行gsub 后,我不确定这是从哪里开始的:
setNames(
names(df_foo),
gsub("[[:punct:]]", "", names(df_foo)))
我没有收到错误消息。不知道这里发生了什么。
现在在dplyr GH 问题页面上以issue #2391 提出。
【问题讨论】:
-
您愿意接受非
dplyr的解决方案吗?该包不能很好地处理变量名中的空格。 -
@Hugh 我想我已经有了非
dplyr的解决方案,即直接在名称上运行gsub。我只想了解这里发生了什么。 -
错误可以追溯到
lazyeval::as.lazy('aa a')返回解析错误。由于dplyr内部严重依赖lazyeval,这可能很难解决。 -
@Axeman 谢谢。我将在
dplyr问题页面上将此作为错误提出。如果您写出您对错误的分析,我会标记您的答案。