###QUESTION 09

###Topic: Sheet 8 Exercise 2
###Question: I feel I struggle a little to differentiate what R is already capable of doing,
#therefore I end up complicating more the command.
#So my question here would be: the for loop, would not be necessary in vectors then?
#If so, then would it only be necessary on data frames? or also in lists and matrices? ( for function creating)

testdata <- (c(1, 2, NA, 7, NA, 6))

#My version:
which.NNA<- function(data) {
  for (i in 1:length(data)){
    NNA<- which(is.na(c(data)))
    fNNA<- data[-NNA]
  }
  return(fNNA)
}
which.NNA(testdata)
## [1] 1 2 7 6
#Solution:
mynna<- function(data){
  return(data[!is.na(data)])
}
mynna(testdata)
## [1] 1 2 7 6
###Answer:
#For the vector, the for loop would not be necessary, to save computational power you should actually avoid it
#You could actually use the command in the solution for any type of data
testdata.frame <- as.data.frame(testdata)
mynna(testdata.frame)
## [1] 1 2 7 6
testdata.list <- as.list(testdata)
mynna(testdata.list)
## [[1]]
## [1] 1
## 
## [[2]]
## [1] 2
## 
## [[3]]
## [1] 7
## 
## [[4]]
## [1] 6
testdata.matrix <- as.matrix(testdata)
mynna(testdata.matrix)
## [1] 1 2 7 6
#For two-dimensional datasets the code without loop also works, but it will not return a data frame
testdata.frame2 <- read.table("C:/Users/Ingo/Documents/A-Uni/EES/3rd_semester/Rcourse2020_Tutoring/data/Test.txt")
testdata.frame2
##      V1     V2
## 1   age gender
## 2     3      M
## 3     1      F
## 4   0.5      M
## 5     5      F
## 6     2      F
## 7  <NA>   <NA>
## 8   0.5   <NA>
## 9     5   <NA>
## 10 <NA>      F
## 11 <NA>      F
## 12    7      M
## 13    7      M
## 14    1   <NA>
## 15  0.5      F
## 16    1      M
## 17    5      F
## 18 <NA>      F
## 19    8      M
## 20  0.5      M
## 21    6      F
mynna(testdata.frame2)
##  [1] "age"    "3"      "1"      "0.5"    "5"      "2"      "0.5"    "5"     
##  [9] "7"      "7"      "1"      "0.5"    "1"      "5"      "8"      "0.5"   
## [17] "6"      "gender" "M"      "F"      "M"      "F"      "F"      "F"     
## [25] "F"      "M"      "M"      "F"      "M"      "F"      "F"      "M"     
## [33] "M"      "F"
#Same for two-dimensional matrices
testdata.matrix2 <- matrix(c(1, 2, NA, 7, NA, 6),5, 6)
testdata.matrix2
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    6   NA    7   NA    2
## [2,]    2    1    6   NA    7   NA
## [3,]   NA    2    1    6   NA    7
## [4,]    7   NA    2    1    6   NA
## [5,]   NA    7   NA    2    1    6
mynna(testdata.matrix2)
##  [1] 1 2 7 6 1 2 7 6 1 2 7 6 1 2 7 6 1 2 7 6