Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use anonymous functions for mutate_each (and summarise_each)? [duplicate]

As we know, it is possible to call functions in R without assigning them to the environment, e.g.

> (function(x){x/2})(5)
[1] 2.5

I would like to use functions like these, on the fly, in a mutate_each (or summarise_each) call. For example, with

df <- data.frame(a = runif(10), b = rnorm(10))

I might attempt to do one of the following, but they all return errors:

library(dplyr)

> df %>%
+     mutate_each(funs((function(x){x/2})), a, b)
Error in eval(substitute(expr), envir, enclos) : 
  Unsupported type CLOSXP for column "a"
> 
> df %>%
+     mutate_each(list((function(x){x/2})), a, b)
Error: is.fun_list(calls) is not TRUE
> 
> 
> df %>%
+     mutate_each(funs((function(x){x/2})(.)), a, b)
Error in vapply(dots[missing_names], function(x) make_name(x$expr), character(1)) : 
  values must be length 1,
 but FUN(X[[1]]) result is length 2
> 

However, if I assign the function to the workspace, then all works as expected:

tmp_fn <- function(x){x/2}

and

   > df %>%
+     mutate_each(funs(tmp_fn), a, b)
             a            b
1  0.360048105 -0.452285314
2  0.020175136  0.253063103
3  0.002351454 -0.148997643
4  0.262808493 -0.599555244
5  0.057246370  0.007567076
6  0.400027700  0.264901865
7  0.120505411 -0.346171709
8  0.266166200  0.116066231
9  0.031302148 -0.129739601
10 0.250212897  0.230194217

Is there a way to dynamically define functions in the call to mutate_each or summarise_each?

like image 487
Alex Avatar asked Sep 21 '16 10:09

Alex


People also ask

How do you use anonymous function?

The () makes the anonymous function an expression that returns a function object. An anonymous function is not accessible after its initial creation. Therefore, you often need to assign it to a variable. In this example, the anonymous function has no name between the function keyword and parentheses () .

Why would you use an anonymous function?

The advantage of an anonymous function is that it does not have to be stored in a separate file. This can greatly simplify programs, as often calculations are very simple and the use of anonymous functions reduces the number of code files necessary for a program.

Which function is known as anonymous function give example?

An anonymous function is a function that was declared without any named identifier to refer to it. As such, an anonymous function is usually not accessible after its initial creation. Normal function definition: function hello() { alert('Hello world'); } hello();

Can you transfer an anonymous function to another function as an argument?

They're called anonymous functions because they aren't given a name in the same way as normal functions. Because functions are first-class objects, we can pass a function as an argument in another function and later execute that passed-in function or even return it to be executed later.


1 Answers

We can wrap the function call with parentheses

df %>%
     mutate_each(funs(((function(x){x/2})(.))))
like image 116
akrun Avatar answered Sep 29 '22 16:09

akrun