Как создать функцию в R? - PullRequest
0 голосов
/ 02 марта 2020

Вместо того, чтобы написать команду одну за другой, например:

data_101$new_column <- "a101" 
data_102$new_column <- "a102" 
data_103$new_column <- "a103" 
data_104$new_column <- "a104" 
data_105$new_column <- "a105"
...
data_150$new_column <- "a150"

Как написать функцию, которая может сохранить произведения? Вот моя команда (не уверен, правильно или нет, потому что я все еще новичок в R)

table_name <- "data_101"
for (i in 2:50) {
  temp <- paste("dat_10", i, sep = "")
  table_name<- c(table_name, temp)
}

Но я не знаю, как продолжить это, я старался изо всех сил ... любой может помочь меня? Буду очень признателен.

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Вы можете использовать ls для получения объектов, а затем mget для получения данных в списке. Мы можем использовать Map для добавления нового столбца в каждом фрейме данных

d_names <- ls(pattern = 'data_\\d+')
total_data <- Map(cbind, mget(d_names), 
                  new_column = paste0("a", gsub("\\D", "", d_names)))

Обычно лучше хранить данные в списке, а не создавать множество объектов в глобальной среде, но если они вам нужны как отдельные Вы можете использовать фрейм данных list2env.

list2env(total_data, .GlobalEnv)

. Воспроизводимый пример:

data_101 <- data.frame(a = 1:5, b = 11:15)
data_102 <- data.frame(a = 6:10, b = 16:20)
d_names <- ls(pattern = 'data_\\d+')
Map(cbind, mget(d_names), new_column = paste0("a", gsub("\\D", "", d_names)))

#$data_101
#  a  b new_column
#1 1 11       a101
#2 2 12       a101
#3 3 13       a101
#4 4 14       a101
#5 5 15       a101

#$data_102
#   a  b new_column
#1  6 16       a102
#2  7 17       a102
#3  8 18       a102
#4  9 19       a102
#5 10 20       a102
0 голосов
/ 02 марта 2020

Вы можете сохранить фрейм данных в списке, чтобы вы могли запустить for-l oop, например:

data <- list()
for (i in c(105,106,...,150)){
    data[[i]]$new_column <- paste0("a",i)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...