Я прототипирую приложение в R. Я использую параллельную библиотеку и parApply для запуска функции на столбцах фрейма данных. Я понимаю, что это также применимо и к непараллельному/Прикладному приложению. У меня есть строка, похожая на:Распаковка списков progammatically в R
myBigList <- parApply(myCluster, myInputData, 2, myFunction)
, где myFunction - это тот, который я написал, принимает вектор в качестве входа. Сама функция выполняет довольно много операций, в которые я не могу войти. Он возвращает список переменных из разных классов. Для целей в MWE, говорят:
myFunction <- function(vectorIn){
# CODE GOES HERE
return(list(
mean = mean(vectorIn),
sd = mean(vectorIn),
vectorOut = sumUserFunction(vectorIn),
plot1 = aPlotGeneratingFunction(vectorIn),
))
Что возвращается ко мне список, содержащий результаты функции. Я могу указать элементы из списка, например:
myBigList$Column1$mean
Но это не очень полезно для моих целей. Я хотел бы знать, как распаковать список, чтобы я мог смотреть на все средние значения. например:
listOfMeans <- myBigList$*ALL_ITEMS*$mean
так что listOfMeans вектор с row.names или data.frame с col.names.
Возможно ли это? Я могу думать о решении, используя цикл for, но это не кажется очень элегантным.
Я также хотел бы сделать что-то похожее на сюжеты, которые я возвращаю, чтобы автоматически создавать pdf-файлы, содержащие все из них. Я предполагаю, что изучение выше поможет.
tl; dr: Каковы наилучшие методы извлечения общих имен данных из списка?
EDIT: фактическая MWE
library('ggplot2')
exampleData <- data.frame(Col1 = rnorm(100), Col2 = rnorm(100), Col3 = rnorm(100))
myFunction <- function(xIn){
meanX <- mean(xIn)
sdX <- sd(xIn)
vecX <- xIn^2 + xIn
plotX <-
ggplot(data.frame(xIn, vecX), aes(x = xIn, y = vecX)) +
geom_point()
return(list(
mean = meanX,
sd = sdX,
vect = vecX,
plot = plotX
))
}
myBigList <- apply(exampleData,
2,
myFunction)
Попробуйте 'mymeans <- sapply (myBigList, \' [[\ ', "означает")', где "значит" есть имя элемента в каждом подсписке, который вы хотите извлечь –
Спасибо, Для элементов в моем списке с одиночными значениями возвращает вектор с соответствующими именами. Именно то, что я хотел. Для элементов в моем списке содержат векторы, это возвращает список векторов, опять же очень приемлемый. Но для элементов в списке, содержащих дескрипторы участков (возможно, не правильный термин), он возвращает матрицу. Я не могу понять, как это сделать. – Lespied
Вот почему вы должны предоставить минимальный воспроизводимый пример. Пока вы показываете какой-то код, он не позволяет пользователям фактически тестировать/запускать его. Например, вы могли бы показать строку типа 'x <- list (col1 = list (mean = 1, sd = 2), col2 = list (mean = 1, sd = 2), col3 = list (mean = 1, sd = 2)) или один, включая графики и данные. Тогда кто-то скажет вам, как это сделать –