Стратегии использования функций для хранения в глобальной среде - PullRequest
0 голосов
/ 27 июня 2019

Допустим, у нас есть следующий фрейм данных:

# Data
Id <- c(1,2,3,4,5,6,7,8,9,10)
Type <- c("Beginner", "Expert", "Intermediate", "Beginner", 
  "Professional", "Expert", "Intermediate", "Professional", 
  "Professional", "Expert")
Response<- c(1,1,2,2,1,2,1,2,1,1)
Successful <- data.frame(Id, Type, Response)
Successful

# Dataframe
#   Successful
Id  Type             Response    
1   Beginner         1
2   Expert           1
3   Intermediate     2
4   Beginner         2
5   Professional     1
6   Expert           2
7   Intermediate     1
8   Professional     2
9   Professional     1
10  Expert           1

Я знаю, что мог бы сохранить его как объект (DFRespType) в глобальной среде, выполнив следующее:

 DFRespType <- 
  as.data.frame(round(100*prop.table(table(Successful$Response, 
                                   Successful$Type),2), 1))

Но вместо этого я хотел бы создать функцию для хранения объекта, чтобы сделать это намного более эффективным.Ниже я попытался сделать функцию StoreDF:

StoreDF <- function(DFName, dataset, variable1, variable2){
  DFName <- as.data.frame(round(100*prop.table(table(dataset$variable1, 
                                              dataset$variable2),2), 1))
}

Но когда я пытаюсь использовать его следующим образом, ничего не сохраняется:

StoreDF(DFRespType, Successful, Response, Type)

Любая помощь с этим будет с благодарностьюоценены.

1 Ответ

2 голосов
/ 27 июня 2019

Не храните объекты в глобальной среде изнутри функции.Вместо этого верните фрейм данных обратно из функции.Также использование переменных в кавычках для подстановки данных.

StoreDF <- function(dataset, variable1, variable2){
    as.data.frame(round(100* prop.table(table(dataset[[variable1]], 
                        dataset[[variable2]]),2), 1))
}

DFRespType <- StoreDF(Successful, "Response", "Type")
DFRespType

#  Var1         Var2 Freq
#1    1     Beginner 50.0
#2    2     Beginner 50.0
#3    1       Expert 66.7
#4    2       Expert 33.3
#5    1 Intermediate 50.0
#6    2 Intermediate 50.0
#7    1 Professional 66.7
#8    2 Professional 33.3
...