I'm writing a function to remove outliers. When I print the results it does what I want but I cant get it to return them. What am I doing wrong? I have a similar code set up that returns the results
When I Print:
NA_Outliers = function(x){
Q1 <- quantile(x, probs=.25)
Q3 <- quantile(x, probs=.75)
iqr = Q3-Q1
upper_limit = Q3 + (iqr*1.5)
lower_limit = Q1 - (iqr*1.5)
for (value in x) {
if (value> upper_limit | value < lower_limit){
value = NA
print(value)
}else{
print(value)
}
}
}
Results:
> NA_Outliers(Test)
[1] NA
[1] 2.428675
[1] 2.428384
[1] 2.714187
[1] 2.457054
[1] 2.464337
[1] 2.686667
[1] 2.166072
[1] 2.690987
[1] 2.632692
[1] NA
[1] 2.84985
When I Return:
NA_Outliers = function(x){
Q1 <- quantile(x, probs=.25)
Q3 <- quantile(x, probs=.75)
iqr = Q3-Q1
upper_limit = Q3 + (iqr*1.5)
lower_limit = Q1 - (iqr*1.5)
for (value in x) {
if (value> upper_limit | value < lower_limit){
value = NA
return(value)
}else{
return(value)
}
}
}
Results:
[1] NA
When I set it up this way, it just returns the first value in the column.
NA_Outliers = function(x){
Q1 <- quantile(x, probs=.25)
Q3 <- quantile(x, probs=.75)
iqr = Q3-Q1
upper_limit = Q3 + (iqr*1.5)
lower_limit = Q1 - (iqr*1.5)
for (value in x) {
if(class(value) == "numeric"){
value[value> upper_limit | value < lower_limit] = NA
return(value)
}else{
return(value)
}
}
}