mutate_at():必须是1d原子向量或列表

时间:2018-03-07 20:57:12

标签: r dplyr

我有以下数据

df <- tibble(a = rnorm(10,0,1), b = a+6, c = b/2)
df %>% mutate_at(vars(a, b), scale) %>% GGally::ggpairs()

这返回了错误

  

错误:列a必须是1d原子向量或列表

进一步挖掘表明str()已更改为mutate_at()

> df %>% mutate_at(vars(a, b), scale) %>% str
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   10 obs. of  3 variables:
 $ a: num [1:10, 1] -1.274 -0.81 0.362 1.374 1.06 ...
  ..- attr(*, "scaled:center")= num 0.106
  ..- attr(*, "scaled:scale")= num 0.813
 $ b: num [1:10, 1] -1.274 -0.81 0.362 1.374 1.06 ...
  ..- attr(*, "scaled:center")= num 6.11
  ..- attr(*, "scaled:scale")= num 0.813
 $ c: num  2.54 2.72 3.2 3.61 3.48 ...

通过df更改变量后,如何使用mutate_at()?例如,如何将GGally::ggcoef与我的缩放数据一起使用?

1 个答案:

答案 0 :(得分:5)

scale()函数会为向量添加额外的属性,以便以后可以取消对矢量的缩放。但这似乎让ggpairs不再认为它是一个数字向量。您可以创建自己的包装器来清理额外的属性

simple_scale <- function(...) as.numeric(scale(...))

然后你可以做

df %>% mutate_at(vars(a, b), simple_scale) %>% GGally::ggpairs()