Итак, действительно, вы должны сделать функцию. Вот несколько шагов, которым нужно следовать:
1. Поместите весь свой код в вашу функцию
my_function <- function(){
# Your code
}
2. Определите, что у вас есть в качестве ввода (иначе, что вы не строите в своем коде), они станут аргументом вашей функции
my_function <- function(arg1, arg2, ...){
# Your code
}
В вашем примере я определил yelp
3. Определите, что вы хотите вывести (в идеале только один объект), они будут в return
вашей функции
my_function <- function(arg1, arg2, ...){
# Your code
return(output)
}
В вашем примере я определил Table
4. Возьмите весь импорт / библиотеку и поместите их за пределы вашей функции
library(lib1)
my_function <- function(arg1, arg2, ...){
# Your code
return(output)
}
РЕДАКТИРОВАТЬ с использованием предложения @ r2evans: обычно используется library
вместо require
, здесь и здесь - некоторая литература по этому вопросу.
В вашем коде я определил tidyr
и tibble
5. Определите, что вы хотите напечатать / View и что было только для отладки. Добавьте печать в печать, подавив то, что вы не хотите
6. Добавить некоторые комментарии / нарезать код
Например, я бы добавил что-то вроде # Creating XXX table
7. Улучшение качества кода
Вы должны попытаться минимизировать количество строк кода (например, используя циклы и избегая двойного кода). Сделать имена переменных явными (вместо k, u, r ...)
Что касается цикла, то в вашем коде вы добавляете несколько столбцов за раз, вы можете сделать цикл для их упорядочения. (Это то, что я сделал ниже). Это помогает сделать ваш код легче для чтения / отладки. В данном конкретном случае, как сказал Грегор, небезызвестно быстрее отбросить их все сразу, используя список имен столбцов (если вам интересно, проверьте его комментарий).
Вот, пожалуйста,
Есть еще некоторые улучшения, особенно в отношении пунктов 7 и 5.
library(tibble)
library(tidyr)
yelp_function <- function(yelp){
# Printing the input
print(head(yelp, 10))
print(str(yelp))
# Flatten table
yelp_flat<- flatten(yelp)
print(str(yelp_flat))
# Create yelp_tbl and drop some columns
yelp_tbl <- as_data_frame(yelp_flat)
# Drop some columns
for (col in c("newcolumn", "newcolumn1", "shotClock", "period", "wallClock", "gameClock", "gameClockStopped", "ball")){
yelp_tbl[, col] <- NULL
}
print(head(yelp_tbl))
# Build some table
good <- unnest(yelp_tbl) #extracts xyz from original dataframe
player <- good %>% separate(xyz, c("player_x", "player_y", "player_z"), sep = ",")
finish <- player %>% separate(xyz1, c("player_x", "player_y", "player_z"), sep = ",")
k <- finish %>% separate(player_x, c("trash", "player_x"), sep = "c")
k$trash <- NULL
r <- k %>% separate(player_z, c("player_z", "tra"), sep = "\\)")
u <- r %>% separate(player_x, c("kol", "player_x"), sep = "\\(")
# Build away team
Away_Team <- u
# Build yelp table: I'm not quite sure why you are rebdoing that... Is this code necessary?
yelp_tbl
# Drop some columns
for (col in c("newcolumn", "newcolumn1", "shotClock", "period", "wallClock", "gameClock", "gameClockStopped", "ball")){
yelp_tbl[, col] <- NULL
}
print(head(yelp_tbl))
good <- unnest(yelp_tbl) #extracts xyz from original dataframe
# Build some table
player <- good %>% separate(xyz, c("player_x", "player_y", "player_z"), sep = ",")
finish <- player %>% separate(xyz1, c("player_x", "player_y", "player_z"), sep = ",")
k <- finish %>% separate(player_x, c("trash", "player_x"), sep = "c")
k$trash <- NULL
r <- k %>% separate(player_z, c("player_z", "tra"), sep = "\\)")
u <- r %>% separate(player_x, c("kol", "player_x"), sep = "\\(")
## Build home_team
Home_Team <- u
# Drop some columns
for (col in c("garbage", "playerId1", "aplayer_x", "aplayer_y", "aplayer_z", "dispose", "brack", "kol", "tra")){
Away_Team[, col] <- NULL
Home_Team[, col] <- NULL
}
# Merge
Table <- rbind(Home_Team, Away_Team)
# Return
return(Table)
}
View(Table) #order frameIdx to see correct order
Запустите его:
Чтобы запустить ваш код, вам просто нужно выполнить функцию с нужным аргументом:
yelp_function(yelp)
NB 1: обратите внимание, что я не тестировал код, поскольку вы не предоставили данные для его запуска. Чтобы улучшить свой вопрос, вы должны предоставить некоторые данные, используя функцию dput
.
Примечание 2: В коде всегда есть место для улучшения, так что вы можете пойти дальше и заняться рефакторингом, чтобы избежать двойного кода. Контролируйте свои входы с некоторой проверкой работоспособности ...