我正在尝试重命名链中的几个变量:
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)))
我没有得到一个错误。不知道这是怎么回事。
现在,这在GH问题页面上作为问题#2391提出dplyr
。
一般而言:我强烈建议您不要将变量名与空格一起使用。它们是一种痛苦,通常会带来超出其价值的麻烦。
这是导致此错误的原因。
rename_
派遣到dplyr:::rename_.data.frame
。该函数的第一行是:
dots <- lazyeval::all_dots(.dots, ...)
这lazyeval
则函数将调用lazyeval::as.lazy_dots
,使用lazyeval::as.lazy
,它本身使用lazyeval:::as.lazy.character
该电话lazy_(parse(text = x)[[1]], env)
。现在,parse()
期望有效的R表达式作为其文本参数:
文字:字符向量。要解析的文本。元素被当作文件的行对待。(来自
help("parse")
)
这就是为什么rename_
似乎不喜欢带有空格的字符向量,而我们却收到“ Error in parse(text = x)
”的原因:
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 ^
我不知道有什么解决方案,只能使用base进行这种简单的重命名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句