Fred
Fred

Reputation: 1883

Working with dataframes in a list: Rename variables

Define:

dats <- list( df1 = data.frame(A=sample(1:3), B = sample(11:13)),
        df2 = data.frame(AA=sample(1:3), BB = sample(11:13)))

s.t.

> dats
$df1
  A  B
1 2 12
2 3 11
3 1 13

$df2
  AA BB
1  1 13
2  2 12
3  3 11

I would like to change all variable names from all caps to lower. I can do this with a loop but somehow cannot get this lapply call to work:

dats <- lapply(dats, function(x) 
            names(x)<-tolower(names(x)))

which results in:

> dats
$df1
[1] "a" "b"

$df2
[1] "aa" "bb"

while the desired result is:

> dats
$df1
  a  b
1 2 12
2 3 11
3 1 13

$df2
  aa bb
1  1 13
2  2 12
3  3 11

Upvotes: 3

Views: 2546

Answers (1)

Joshua Ulrich
Joshua Ulrich

Reputation: 176648

If you don't use return at the end of a function, the last evaluated expression returned. So you need to return x.

dats <- lapply(dats, function(x) {
            names(x)<-tolower(names(x))
            x})

Upvotes: 3

Related Questions