У меня есть функция, которую я хочу расширить с возможностью сохранения результатов в файл csv. Имя файла CSV должен быть сформирован на основе data.frame имя передается этой функции:Как получить имя data.frame из списка, переданного функции, используя lapply
my.func1 <- function(dframe, ...){
# PART OF CODE RESPONSIBLE FOR COMPUTATION
# ...
# PART OF CODE WHERE I WANT TO STORE RESULTS AS CSV
csv <- deparse(substitute(dframe))
csv
}
Когда я называю эту функцию следующим образом, то имя набора данных передается этой функции интерпретируется правильно:
> my.func1(mtcars)
[1] "mtcars"
Но мне нужно вызвать эту функцию для каждого файла data.frame из списка. Если я называю эту функцию для конкретного data.frame из списка, то она в основном работает (я получаю уродливое имя, содержащее также название списка, но один обходной путь может быть обрезать его, используя регулярное выражение):
> LoDFs <- list(first=data.frame(y1=c(1,2,3), y2=c(4,5,6)), second=data.frame(yA=c(1,2,3), yB=c(4,5,6)))
> my.func1(LoDFs$first)
[1] "LoDFs$first"
Проблема заключается в том, когда Я хочу вызвать эту функцию для всех data.frames из списка. В этом случае имена data.frame являются неразбериха:
> lapply(LoDFs, my.func1)
$first
[1] "X[[i]]"
$second
[1] "X[[i]]"
> lapply(seq_along(LoDFs), function(x) { my.func1(LoDFs[[x]]) })
[[1]]
[1] "LoDFs[[x]]"
[[2]]
[1] "LoDFs[[x]]"
Что я делаю неправильно и как я могу избежать упомянутый обходной путь с регулярными выражениями и сделать код более устойчивым?
Последний раз я столкнулся с подобной проблемой, я сдался и сделал вектор имен из data.frames, а затем использовать get() для захвата data.frame. Для вас что-то вроде lapply (имена (LoDFs), my.func1), где первая строка my.funct1 - df <- Lodf [[n]] Надеюсь, у кого-то есть более элегантное решение. –