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

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

Val_Uniques <- function(df, col) {
 return(unique(df$col))
}

Val_Uniques(mytable, city)

результат NULL, как я могу это исправить, пожалуйста? Я хочу добавить блок trycatchblock и напечатать предупреждающее сообщение «столбец не существует», если имя столбца неверно.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Я уверен, что вы ищете deparse(substitute(x)) и get() здесь.Первый преобразует указанные имена в строки, второй загружает ваши данные в первую очередь.Для исключения мы можем просто использовать выражение if.

Val_Uniques <- function(df, col) {
  df <- deparse(substitute(df))
  df <- get(df)
  col <- deparse(substitute(col))
  if(!(col %in% names(df)))
    stop("the column does not exist")
  return(unique(df[[col]]))
}

Тест

> Val_Uniques(mytable, city)
[1] A D B C E
Levels: A B C D E

> Val_Uniques(mytable, foo)
Error in Val_Uniques(mytable, foo) : the column does not exist

Данные

mytable <- data.frame(city=LETTERS[c(1, 4, 4, 2, 3, 2, 5, 4)],
                      var=c(1, 3, 22, 4, 5, 8, 7, 9))
0 голосов
/ 26 января 2019

Попробуйте это:

df <- data.frame(id = c("A", "B", "C", "C"),
                 val = c(1,2,3,3), stringsAsFactors = FALSE)

Val_Uniques <- function(df, col) {
  return(unique(df[, col]))
}

Val_Uniques(df, "id")

[1] "A" "B" "C"

Эта ссылка помогает при передаче имен столбцов в функции: Передача имени столбца data.frame в функцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...