TAGS

Recent Posts

Archives

Working with Vectors: Step Seven in Learning R Programming for Free
Posted on November 28, 2018
Author: Linda Stewart, Performance Architects

I hope you are enjoying the “Learning R Programming for Free” series; here are links to the previous segments (Step One, Step Two, Step Three, Step Four, Step Five, Step Six) to provide some helpful background.

In the previous installment, we learned to work with vectors and how to complete some basic operations on sets of vectors.

In our last discussion, we ended with this table of comparison operators available for us to use to test the values in the vectors.  In this discussion, let’s apply these tests.


We were not doing particularly well at the Fantastic Casino.  Let’s move to the Secret Spot Casino and try our chances there.  We will use the comparison operators to check if our luck is any better here.

To add comments to R, we prefix the line with the hash “#” symbol:

# poker and blackjack winnings from Monday to Friday:

>blackjack_winnings <- c(120, 60, -80, 40, -25)
> poker_winnings <- c(40, -50, 250, -25, 140)
> dow_vector <- c(“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”)
> names(blackjack_winnings) <- dow_vector
> names(poker_winnings) <- dow_vector
> total_blackjack <- sum(blackjack_winnings)
> total_poker <- sum(poker_winnings)
>
> # Let’s find out at the new casino, on what days did we make money on poker?

We can find out on which days of the week we made money by logically testing each member of the vector:

> winning_dow_vector <- poker_winnings > 0

We can then print the days that we won money, and how much was won in poker:

>poker_winnings
Monday   Tuesday Wednesday  Thursday    Friday
40       -50       250       -25       140
> winning_dow_vector <- poker_winnings > 0
> winning_dow_vector
>Monday   Tuesday Wednesday  Thursday    Friday
TRUE     FALSE      TRUE     FALSE      TRUE

poker_winnings[winning_dow_vector]
Monday Wednesday    Friday
40       250       140

So, it already looks like our new casino has potential.

Let’s take a look at a few more functions that work with vectors:

typeof(x)
length(x)
str(x)

The “type of” function takes any object “x” and returns its type:

> typeof(poker_winnings[winning_dow_vector])
[1] “double”

The “length” function takes any object “x” and returns the length of vectors, including lists and factors:

> length(poker_winnings[winning_dow_vector])
[1] 3

The “str” function takes any object “x” and displays an abbreviated informational output summarizing the contents of the object:

> str(poker_winnings[winning_dow_vector])
Named num [1:3] 40 250 140
– attr(*, “names”)= chr [1:3] “Monday” “Wednesday” “Friday”

Something you will eventually see in data dets are “NULL” or “NA” values. “NaN” means “Not a Number” and means the value is undefined.  When we use functions like “mean()” or “sum()” on a vector containing “NA” or “NaN,” if there are empty values, functions like mean and sum will return “NA” and “NaN”.  We can logically test for “NA” and “NaN” and use “is.null” and “I.na” to trim those values from the data set:

> x <- c(1, 2, NA, 4, 5, 6, NA, 8, NULL)   # Create a numeric vector
> x                                        # There’s an NA in there
[1]  1  2 NA  4  5  6 NA  8
>
> x * 2                                    # If any NA, returns NA
[1]  2  4 NA  8 10 12 NA 16
>
> sum(x)
[1] NA
> mean(x)
[1] NA

One last thing to note: We have to watch our white spaces in R.  Let’s look at this:

x<-3

Question: “Are you assigning 3 to x or are you trying to ask if x is less than -3?”

x <- 3

or

x < -3

In our next installment, we will continue our discussion of R data structures by looking at the data frame.

Additional blog posts on more complex R concepts to follow; please contact communications@performancearchitects.com if you have any questions or need further help!

 

 

Share
This post was posted in Technical
© Performance Architects, Inc. and Performance Architects Blog, 2006 - present. Unauthorized use and/or duplication of this material without express and written permission from this blog's author and/or owner is strictly prohibited. Excerpts and links may be used, provided that full and clear credit is given to Performance Architects, Inc. and Performance Architects Blog with appropriate and specific direction to the original content.

Leave a Reply

Your email address will not be published. Required fields are marked *