1

私はたくさんの 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)

私が見逃している大きな概念があり、それが私を妨げていることを私は知っています。何もしないようです。

4

3 に答える 3

6

R の引数はコピーで渡されます。あなたがしなければなりません:

lower <- function (df) {
  names(df) <- tolower(names(df))
  df
}
file1 <- lower(file1)
于 2013-09-13T14:06:03.080 に答える
0

以外の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
于 2013-09-13T15:05:47.030 に答える