2017-03-03 51 views
1

我正在使用dplyr的mutate_if将因子列转换为字符,但如果没有因素列,则它会将所有内容都更改为字符。见下面如果所有列的谓词为FALSE,则dplyr mutate_if不起作用

> x <- data.frame(a = c(1,2,3), b = c(4,5,6)) 
> str(x) 
'data.frame': 3 obs. of 2 variables: 
$ a: num 1 2 3 
$ b: num 4 5 6 
> str(mutate_if(x, is.factor, as.character)) 
'data.frame': 3 obs. of 2 variables: 
$ a: chr "1" "2" "3" 
$ b: chr "4" "5" "6" 

我能够做

if(length(dplyr:::probe_colwise_names(x, is.factor)) > 0) 
    x <- mutate_if(x, is.factor, as.character) 

,以避开它,但我做错了什么或这是dplyr的错误吗?

+1

哪个版本dplyr的是你吗?它按照我的意图工作。 'packageVersion('dplyr')'0.5.0.9000'' – GGamba

+0

我使用的是0.5.0,我认为它是CRAN上的最新版本。我猜0.5.0.9000是从github安装的版本,并没有在CRAN上发布? – user1165199

+0

是的,'x.x.x.9xxx'是开发版本。 – Axeman

回答

1

事实上,我已经玩了这个,并得出了与您的结论相同的结论(dplyr版本0.5.0)

,它工作作为作为即将至少有一列是一个因素:

x$a <- factor(x$a) 
str(mutate_if(x, is.factor, as.character)) 
    'data.frame': 3 obs. of 2 variables: 
    $ a: chr "1" "2" "3" 
    $ b: num 4 5 6 

而不是其他