使用函数将变量名称从upper更改为lower

时间:2013-09-13 13:56:39

标签: r function character names

我正在使用一堆SAS数据集,我更喜欢使用read.sas7bdat将变量名称全部改为小写,但我经常这样做,我想编写一个函数。这种方法很好,

df <- data.frame(ALLIGATOR=1:4, BLUEBIRD=rnorm(4))
names(file1) <- tolower(names(file1))

但是当我尝试将它放入一个函数时它没有分配。

lower <- function (df) {names(df) <- tolower(names(df))}
lower(file1)

我知道我缺少一些更大的概念,这阻碍了我。它似乎没有做任何事情。

3 个答案:

答案 0 :(得分:6)

R中的参数通过副本传递。你必须这样做:

lower <- function (df) {
  names(df) <- tolower(names(df))
  df
}
file1 <- lower(file1)

答案 1 :(得分:3)

虽然我不明白为什么你会这样做而不是简单地:names(df) <- tolower(names(df)),我认为你应该这样做:

 lower <- function (x) {tolower(names(x))}
 names(df) <- lower(df)

答案 2 :(得分:0)

这是一个答案,我建议不要使用{s>除globalenvironment 以外的任何地方,但它确实为您提供了一些方便的简写。基本上我们处理函数内部的赋值,覆盖传递给它的对象。对你来说很简单,但请注意你的使用方式:

tl <- function(x){
  ass <- all.names(match.call()[-1])
  assign( ass , setNames( x , tolower(names(x))) , env = sys.frame(sys.parent()) )
}

#  This will 'overwrite' the names of df...    
tl(df)

#  Check what df now looks like...
df
  alligator   bluebird
1         1  0.2850386
2         2 -0.9570909
3         3 -1.3048907
4         4 -0.9077282