2014-12-07 7 views
1

Как вы получаете имена данных в списке? Не столбцы внутри фрейма данных, а сами кадры данных. Так вот, что у меня есть:Получить имена данных в списке

mydata <- lapply(myfiles, read.csv, stringsAsFactors=FALSE) 
fileNames <- list.files(pathx,pattern = "*.csv") 
names(mydata) <- gsub("\\.csv", "", fileNames) 
results <- lapply(mydata,myFUN) 

имена, скажем, являются [df1,df2,df3...]. Теперь, в зависимости от имени фрейма данных, myFUN выполняет определенную задачу. Если бы я попробовать это

myFUN = function(data){ 
    dataFrameName = substitute(data) 
    ... #do stuff 
} 

dataFrameName держит X[[1L]] вместо df1 и X[[2L]] вместо df2. Каков лучший способ получить имя фрейма данных внутри списка?

Спасибо!

+0

Зачем вам нужны имена? –

+1

Существует некоторая периодичность, встроенная в имя файла, который я использую для создания столбца Logicals. Например, для df1 я делаю каждый i + 1 row = TRUE. Для df2 каждый i + 2 и т. Д. – froy

+0

Пример имени файла? –

ответ

1

Если вы просто читаете из списка файлов, то в кадрах данных нет : имена: [[1]] и [[2]], которые вы видите, являются индексами списка. Если вы хотите выполнять операции, которые различаются в зависимости от data.frame, это будет довольно уродливо. Лучшее, что вы, вероятно, можете сделать что-то вроде:

myData <- lapply(fileNames, function(x){ 
    holding <- read.csv(x, stringsAsFactors = FALSE) 
    holding$periodicity <- gsub("\\.csv", "", x) 
    return(holding) 
}) 

results <- lapply(myDate, myFUN) 

... где решения дерева в myFun теперь может работать на основе значений в колонке «периодичность» каждый data.frame в. Это уродливый взлом (и не будет самой быстрой: каждый раз, когда вы изменяете такой файл данных, вам нужно скопировать его, что дорого).

В качестве альтернативы вы можете посмотреть что-то вроде Map или mapply (подумайте, но он принимает несколько входных данных) и игнорирует проблему присвоения имен переменным; вместо этого вы передадите как myData, так и имена, извлеченные с помощью вызова gsub, в mapply, и в итоге получите функцию, которая должна работать, как df1, так и имя «df1».

Но, честно говоря, мой совет будет заключаться в том, что вы пытаетесь решить проблему слишком далеко по трубопроводу. Хотя это будет , работа, если есть данные, на которые вы зависите, чтобы решить, какой анализ выполняется, вероятно, он должен быть включен в файл, чтобы его можно было читать, а не включать в имя файла. Poke, кто производит файлы и просит их быть разумными, p

+0

Из того, что я знаю, mapply похож на sapply, но с несколькими аргументами. Дело в том, что мне хотелось бы что-то вроде lmapply, это то, что возвращает список, но принимает несколько аргументов. – froy

+1

@froy 'mapply' может возвращать список (хотя он по умолчанию упрощает). 'Map()' возвращает список по умолчанию и имеет несколько другой порядок параметров. Оба одновременно повторяют несколько аргументов. – MrFlick

+0

@MrFlick большое спасибо! Использование 'mapply' помогло мне решить мою проблему. Как мне ответить или судить о ответе, если мой вопрос в основном не ответил, но тем не менее я решил свою проблему в ходе обсуждений в ответах? SO на помощь – froy

Смежные вопросы