我正在使用一堆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)
我知道我缺少一些更大的概念,这阻碍了我。它似乎没有做任何事情。
答案 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