Как передать аргумент в пользовательскую функцию при использовании lapply - PullRequest
1 голос
/ 18 июня 2020

У меня есть список фреймов данных, и я хочу применить к нему пользовательскую функцию, используя lapply

Вот моя функция:

  rename_cols_pattern <- function (df, pattern, replacement = "") {
  names(df) <- gsub(names(df), pattern = pattern, replacement = replacement)
}

Как мне использовать эту функцию с lapply? Это не работает, потому что переменная df отсутствует. Как передать переменную df, которая будет кадрами данных в списке di_data

di_data <- lapply(di_data, rename_cols_pattern(pattern = "X"))

Я могу заставить это работать так:

di_data <- lapply(di_data, function(x) {
  names(x) <- gsub(names(x), pattern = "X", replacement = "")
  x
})

Однако я хочу, чтобы функция быть отдельным и хочу понять, как этого добиться

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вероятно, вы пропустили инструкцию return своей функции.

rename_cols_pattern <- function(df, pattern, replacement="") {
  names(df) <- gsub(names(df), pattern=pattern, replacement=replacement)
  return(df)
}

Обычное использование:

rename_cols_pattern(dat, pattern="X", replacement="COL")
#   COL1 COL2 COL3 COL4
# 1    1    4    7   10
# 2    2    5    8   11
# 3    3    6    9   12

Использование lapply:

lapply(list(dat, dat), rename_cols_pattern, pattern="X", replacement="COL")
# [[1]]
#   COL1 COL2 COL3 COL4
# 1    1    4    7   10
# 2    2    5    8   11
# 3    3    6    9   12
# 
# [[2]]
#   COL1 COL2 COL3 COL4
# 1    1    4    7   10
# 2    2    5    8   11
# 3    3    6    9   12

Данные:

dat <- structure(list(X1 = 1:3, X2 = 4:6, X3 = 7:9, X4 = 10:12), class = "data.frame", row.names = c(NA, 
-3L))
0 голосов
/ 18 июня 2020

rename_with был создан для решения подобных проблем

library(tidyverse)

mtcars %>% 
  rename_with(.fn = ~ str_remove_all(.x,"X"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...