Joris ответ - самый чистый способ сделать это. Я бы добавил функцию для извлечения атрибута:
for(ename in names(data.list)) {
attr(data.list[[ename]], "ename") <- ename
}
ename <- function(x) attr(x, "ename") # states for element name
Таким образом, вы используете его как:
l_ply(data.list, function(df, ...) {
cli.name<- ename(df)
# make plots, save results using cli.name
})
Я обычно использую этот метод:
l_ply(names(data.list), function(cli.name, df=data.list[[cli.name]], ...) {
# make plots, save results using cli.name
})
Перебирать имена и извлекать data.frame
из исходного списка, используя их.
Просто для уведомления есть взлом. Я не рекомендую это, потому что это портит фреймы, и это трудно контролировать.
Используя тот факт, что llply
на самом деле является циклом for
, вы можете извлечь фактический шаг изнутри функции. Это можно сделать с помощью get
в правильной среде.
l_ply(data.list, function(df, ...) {
cli.name<- names(data.list)[get("i",parent.frame())]
# make plots, save results using cli.name
})