mutate_at 在 R 中使用 lambda 函数?

mutate_at in R with lambda function?

我有一个包含 100 列的数据框。每列代表一个概率值。

我想在那里进行缩放,我正在使用以下转换:

df <- df %>%
      mutate_at(vars(specific_columns), 
                funs(function(x) {((x - min(x)) / (max(x) - min(x)))}))

但是它不起作用,没有产生我想要的输出。

例如样本数据为:

col1        col2        col3        col4        col5        
0.014492754 0.014492754 0.014492754 0.014492754 0.014492754 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
0.028985507 0.028985507 0.028985507 0.028985507 0.028985507 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
0.014492754 0.014492754 0.014492754 0.014492754 0.014492754 
0.014492754 0.014492754 0.014492754 0.014492754 0.014492754 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
0.010989011 0.010989011 0.010989011 0.010989011 0.010989011 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 

错误:

Error in mutate_impl(.data, dots) : Column col1 is of unsupported type function

试试这个语法:

library(dplyr)
df %>% mutate_at(vars(everything()), funs(((. - min(.)) / (max(.) - min(.)))))
#>         col1      col2      col3      col4      col5
#> 1  0.5000000 0.5000000 0.5000000 0.5000000 0.5000000
#> 2  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#> 3  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#> 4  1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
#> 5  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#> 6  0.5000000 0.5000000 0.5000000 0.5000000 0.5000000
#> 7  0.5000000 0.5000000 0.5000000 0.5000000 0.5000000
#> 8  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#> 9  0.3791209 0.3791209 0.3791209 0.3791209 0.3791209
#> 10 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000

funs() 将为您解释 一个伪函数。它有助于处理两种无法正常工作的情况:

  1. 函数的字符名称(例如"mean")
  2. 使用 调用一个函数。作为虚拟参数(如我的示例)

如果您已经声明了自己的(匿名)函数,则无需使用 funs(),因为 mutate_at() 将按原样接受:

mutate_at(df, vars(everything()), function(x) {((x - min(x)) / (max(x) - min(x)))})

my_func <- function(x) {((x - min(x)) / (max(x) - min(x)))}
mutate_at(df, vars(everything()), my_func)