2013-11-14 4 views
0

Я получаю 3 кадра данных (обучение, проверка и тестирование), содержащие данные с теми же переменными. Я предпочел бы, чтобы они не должны содержаться в списке, так что я могу обратиться к ним аккуратно, как trn, vld и tst в отличие от list[[1]] и т.д.Итеративное изменение кадров данных в R

мне нужно сбросить переменные из всех наборов данных. Есть ли способ итеративного процесса без предварительного создания списка, итерации, а затем повторного создания фреймов данных из списка? т.е. я сейчас делаю хотел сделать что-то вроде:

trn <- read.csv("training_split_60pct.csv") 
vld <- read.csv("validation_split_20pct.csv") 
tst <- read.csv("test_split_20pct.csv") 

# a list of variables to drop 
drops <- c("ONE", "TWO", "THREE", "FOUR") 

dfRawList <- list(trn, vld, tst) 
dfList <- lapply(dfRawList, function(df) df[,!(names(df) %in% drops)]) 
names(dfList) <- c("trn", "vld", "tst") 

trn <- dfList[["trn"]] 
vld <- dfList[["vld"]] 
tst <- dfList[["tst"]] 

Но я хотел бы быть в состоянии сделать:

trn <- read.csv("training_split_60pct.csv") 
vld <- read.csv("validation_split_20pct.csv") 
tst <- read.csv("test_split_20pct.csv") 

# a list of variables to drop 
drops <- c("ONE", "TWO", "THREE", "FOUR") 

for (df in c('trn', 'vld', 'tst')){ 
    df <- lapply(df, function(df) df[,!(names(df) %in% drops)]) 
} 

Конечно, это только создает один кадр данных с данными tst ,

+0

Вы, кажется, знаете рекомендуемый способ в R. Я предлагаю использовать его. – Roland

+0

@ тени: спасибо за ответы. Я новичок в R, так что извиняюсь. Есть ли примеры того, почему это рекомендуется? – kungfujam

ответ

2

Вы можете сделать это, используя assign и get. Но я бы рекомендовал использовать списки и lapply, как вы сейчас делаете.

for (df in c("trn", "vld", "tst")){ 
    assign(df, get(df)[, !names(get(df)) %in% drops]) 
} 
Смежные вопросы