# Team:Heidelberg/Tempaltes/iGEM42-W-18a

## Filters fixed

The drafts for most of the filtering functions had already been implemented, but ended up non-functional. This was due to data removal using empty vectors, which produces a severe error in R. Table 18.1 gives an overview of the different parameters and their basic filter design.

Table 18.1: Overview of all filters.
Parameter Type Options* Status
Year numeric 2007-2012 final
Region string levels final
Track string levels final
Students numeric 0, 5, 10, 15, 20, >20 final
Advisors numeric 0, 2, 5, 10, 15, >15 final
Instructors numeric 0, 2, 5, 10, 15, >15 final
Biobricks numeric 0, 5, 10, 20, 50, 100, 200, >200 final
Championship character vector levels working
Regional character vector levels working
Medals string bronze, silver, medal missing
Score numeric 0-100 (steps of 10) final
Abstract binary provided/missing missing
* Levels means all possible values the parameter can have.

The general code for filtering a numerical range parameter X using R after this update is displayed below (changes are displayed in red).

```FilterForX <- function(data) {
if (input\$FILX_min == ">max") data <- data[-which(data\$X < max),]
else if (input\$FILX_max == ">max" & input\$FilX_min != "min") data <- data[-which(data\$X < input\$FILX_min),]
else if (input\$FILX_max == ">max" & input\$FilX_min == "min") return(data)
else data <- data[-which(data\$X < input\$FILX_min | data\$X > input\$X_max),]
return(data)
}
```

The general code for filtering a single string parameter Y using R now looks like this:
```FilterForY <- function(data) {
matchY <- rep(0, times=length(data\$Y))
for (i in 1:length(input\$FILY)) {
matchY[which(data\$Y == input\$FILY[i])] <- 1
}
delete <- which(matchY == 0)
if (length(delete) != 0) data <- data[-delete,]
rm(delete)
rm(matchY)
return(data)
}
```

The code for matching the awards is slighly more complicated, since the awards are saved in the data-list and we want to reduce the data-frame. This is the pseudocode for the functions:
```iterate through all awards to be included {
(re-)set a vector for deleting those items from the data-list
iterate through all the teams in the data-list {
if the award matches one of the team awards:
- expand the vector for the teams to keep with the name
- expand the vector for the teams already matched
}
delete those teams from the data-list, that were already positive in order to save runtime
}
reduce data-frame according to the matching result
```
All the filter functions and corresponding layout elements were put together in one file to easily copy and paste them to the different apps.