Подмножество данных из функции в R - PullRequest
0 голосов
/ 27 сентября 2019

Мне известно, что на этот вопрос довольно много ответов, и я читаю их с 10 утра сегодня утром (сейчас 5 вечера здесь).

Я пытался выяснить, что, как мне показалось, было бы просто, как разместить подкадр данных внутри моей функции.Все, что я пытаюсь сделать, это распечатать вектор, который в идеале был бы получен путем подстановки DF.Проблема, с которой я сталкиваюсь, заключается в том, что я использую тот же desired_column_name в другом месте, ссылаясь непосредственно на фрейм данных, и поэтому я не могу просто «добавить цитаты» к своему аргументу.Я попытался добавить цитаты к аргументу desired_column_name и затем применить noquote из функции, но это тоже не сработало и ухудшило ситуацию.

Вот простые входные данные, которые я использую:

S = c(1,0,0,4,1,6,6,3,5,3,1)
population = data.frame(S)

Вот код для справки:

proportion_of_elements= function(df_for_use, desired_column_name, desired_elements,logical){     

  DF = df_for_use

  chr_desired_column_name = as.character(desired_column_name)

  desired_column =  DF[,chr_desired_column_name]


  vec_length = length(desired_column)
  num_of_desired_element = sum(desired_column == desired_elements)
  proportion = num_of_desired_element/vec_length


  statement_for_pop_prop = c("The proportion of ", desired_elements,'\'s', "from the population is: ", proportion)
  format_vers_of_statement_for_pop_prop = str_c(statement_for_pop_prop, collapse = " ")

  # summary = summarize(data_frame, mean = mean(desired_column_name, na.rm = TRUE), var = var(desired_column_name, na.rm = TRUE), sd = sd(desired_column_name, na.rm = TRUE))
  # 
  # statement_of_summary = c("The summary statistics are the following: ", summary)
  # 
  # format_of_summary = str_c(statement_of_summary, collapse = " ")

  #print(format_vers_of_statement_for_pop_prop)
   print(desired_column)

}

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

proportion_of_elements(population,S,1,FALSE)

Требуемый выход:

1 0 0 4 1 6 6 3 5 3 1

Токовый выход:

 Error in `[.data.frame`(DF, , chr_desired_column_name) : 
  undefined columns selected 

Как уже упоминалось ранее, я могу получить желаемый результат, но для этого потребуется поместить кавычки вокруг desired_column_nameаргумент, который может привести ко всему остальному.

Как вы можете видеть, я также попытался предложить другое решение переопределения самого фрейма данных внутри функции.Я попробовал это с помощью DF.Закомментированный код - это та часть, которая использует desired_column_name без кавычек.

Если мой код слишком сложный, я прошу прощения.Основная проблема, которую я вижу, связана с тем, как интерпретируется desired_column.Так что это та часть, на которой нужно сосредоточиться.

Спасибо всем, кто дает какие-либо предложения.

РЕДАКТИРОВАТЬ

После предложения, данного Дж. ГротендикомЯ отредактировал свой код и получил следующую ошибку:

1 Ответ

1 голос
/ 27 сентября 2019

Предположительно, вы хотите что-то вроде этого:

prop_elem <- function(data, col, elem) {

  prop <- mean(data[[col]] == elem, na.rm = TRUE)
  cat("The proportion of", elem, "in column", col, "is", prop, "\n")

  Mean <- mean(data[[col]], na.rm = TRUE)
  cat("The mean of column", col, "is", Mean, "\n")

  data[[col]]
}

prop_elem(population, "S", 1)

, дающее:

The proportion of 1 in column S is 0.2727273 
The mean of column S is 2.727273 
 [1] 1 0 0 4 1 6 6 3 5 3 1
...