Какие аргументы для самоопределяемых функций для использования в списке фреймов данных в R - PullRequest
0 голосов
/ 07 августа 2020

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

###Install required packages if necessary

if(!require("tidyverse")) install.packages("tidyverse")
if(!require("fs")) install.packages("fs")
if(!require("readxl")) install.packages("readxl")
if(!require("matrixStats")) iinstall.packages("matrixStats")

###Load required packages

library(tidyverse)
library(fs)
library(readxl)
library(matrixStats)

###Define functions

#Import all sheets into a list from an Excel file

read_excel_allsheets <- function(filename, tibble = FALSE) {
  sheets <- readxl::excel_sheets(filename)
  x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
  if(!tibble) x <- lapply(x, as.data.frame)
  names(x) <- sheets
  x
}

#Subtract "Background" column from corresponding measurement column 

correct_background <- function(df) {
  cols <- grep('^\\d+$', names(df), value = TRUE)
  new_cols <- paste0(cols, '_corrected')
  df[new_cols] <- df[cols] - df[paste0('Background ', cols)]
  }

#Calculate means and standard deviations and drop "_corrected" columns

mean_SD <- function(df) {
  df$mean <- rowMeans(select(df, contains("_corrected")))
  df$SD <- rowSds(as.matrix(select(df, contains("_corrected"))))
  df <- subset(df, select = c("Wavelength", "mean", "SD"))
}

###Apply functions

#Load all Excel sheets of chosen file into a list of data frames

mysheets <- read_excel_allsheets(file.choose())

#Apply background correction on every data frame in the list

lapply(mysheets, correct_background)

#Apply function to calculate mean and SD

lapply(mysheets, mean_SD)

Теперь, когда он проваливается, находится в части ###Apply functions. Первая функция, та, которая загружает листы Excel, работает нормально, но я думаю, мне нужно определить аргумент для второй и третьей функции, который сообщает им, что они должны работать с любым фреймом данных в списке независимо от его имени. Есть ли способ по умолчанию ссылаться на каждый фрейм данных в списке в R? Или мне нужно определить это вручную? Помощь очень ценится!

1 Ответ

0 голосов
/ 07 августа 2020

Вам необходимо сохранить результаты операций lapply. Измените операторы lapply на следующие.

#Apply background correction on every data frame in the list

mysheets <- lapply(mysheets, correct_background)

#Apply function to calculate mean and SD

mysheets <- lapply(mysheets, mean_SD)

...