I want to write a function called beta, such that beta(j)n will give the number of integers that have the last digit j, where j is an integer from 1-9, from integers 1 to n. e.g. beta(2)4=1, beta(1)10=2
Help me pls, I am struggling as I have no prior knowledge of r.
That can be an advantage. Every R
problem can be thought of with advantage as the interaction of three objects— an existing object, x , a desired object,y , and a function, f, that will return a value of y given x as an argument. In other words, school algebra— f(x) = y. Any of the objects can be composites.
In this problem the information at hand consists of integers in two pieces: j is a single integer and n is a sequence of integers; taken together they are the x of the equation. y is the length of a vector of the integers in n that satisfy the condition that the last digit is the same as j.
Everything in R
is an object; objects have properties depending on the class
; some are containers for data and others perform functions. Functions are said to be first-class objects—that just means that they can be given as arguments to other functions, just like f(g(x) = y.
Let's tackle the simplest parts of the problem, first.
Our goal is a function f that will take j and n and do something. It will look like
the_function <- function(x,y) # do something next
Call it with j and n is just
the_function(2,1:10)
for example. The 2
represents the integer we want to match and 1:10
is the sequence of integers from one to 10. :
expands to `c(1,2,3,4,5,6,7,8,9,10).
Assume we have a vector as a result of the_function
, and we want to know: How many?
length(my_vector)
That's simple enough.
For the rest of the work, we're going to call on the {stringr}
package, which is good to deal with patterns in strings. Why strings and not integers? Because it's much easier to convert the numbers to characters and do a simple search.
For that we first need another simple, builtin— as.character
, which converts an integer to a character.
Then we need to describe how to recognize a last character in a string.
last_one <- ".$"
which translates to .
= a single character and $
the end of the string.
So, now we are in a position to identify the final characters (string representations of the integers, "1"
, etc. The final piece is which
, which allows us to gather up all of the last integers that match the target.
suppressPackageStartupMessages({
library(stringr)
})
target <- ".$"
get_last <- function(j,n) which(str_extract(as.character(n),target) == as.character(j))
get_last(2,1:100)
#> [1] 2 12 22 32 42 52 62 72 82 92
length(get_last(2,1:100))
#> [1] 10
Can the output be the number of integers that fulfill the condition, such that desired output can be generated?
I mean the function get_last(j,1:n)
or
get_last <- function(j,n) length(which(str_extract(as.character(n),target) == as.character(j)))
Remove and > symbols at beginning of lines
This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.
If you have a query related to it or one of the replies, start a new topic and refer back with a link.