[R] Help needed for one question (Urgent)
Richard O'Keefe
r@oknz @end|ng |rom gm@||@com
Tue Nov 5 16:27:28 CET 2019
This looks vaguely like something from exercism.
Let's approach it logically.
xa xb xc ya yb zc
We see two patterns here:
A: x x x y y z
B: a b c a b c
If only we had these two character vectors, we could use
paste(A, B, sep = "")
to get the desired result. So now we have reduced the
problem to two simpler subproblems. We have been given
a clue that rep() might be useful.
A: rep(c("x", "y", "z"), c(1, 2, 3))
B: rep(c("a", "b", "c"), 3)
But you were told not to use c(). So now we have three
simpler subsubproblems:
C: "x" "y" "z"
D: 3 2 1
E: "a" "b" "c"
You were given another hint. seq(). That builds a vector of numbers.
Reading ?seq will give you
D: seq(from = 3, to = 1, by = -1)
or using ":" syntax,
D: 3:1
What about C and E? This needs two more pieces of knowledge:
- the variable letters,whose value is c("a","b",...,"y","z")
- how vector indexing works in R.
E: letters[1:3]
C: letters[24:26]
So now we can put all the pieces together:
paste(rep(letters[24:26], 3:1), rep(letters[1:3], 2), sep = "")
You were given
- seq
- rep
as hints. You were expected to look up string handling in R
and find things like paste(), substr(), and nchar().
What about the variable 'letters'?
Well, you were expected to know or find out about substr.
You were certainly expected to know about "vectorising".
So you would naturally try substr("abc", 1:3, 1:3).
And that would not work.
So you would be expected to read the documentation:
?substr
And then you would find that substr() *doesn't* do what
you expect, but substring() *does*. So
C: substring("xyz", 1:3, 1:3)
E: substring("abc", 1:3, 1:3)
This is not really an exercise in R programming.
In real R programming you *don't* avoid arbitrary aspects of the
language and library, but use whatever is appropriate.
So what *is* this exercise about?
(1) It is an exercise in working backwards. (See the classic book
"How to Solve It" by Polya.) You know what you must construct,
you have been given some directions about what to use. It's
about saying "well, I could *finish* this task by doing this action,
so what would I have to set up for that?" In this case, the key
step for me was seeing xa xb xc ya yb yc as (x,x,x,y,y,z)++(a,b,c,a,b,c).
The mention of rep had me *looking* for repetitions like that.
(2) It is an exercise in using the R documentation to figure out how to
use rep and seq and what is available for splitting and pasting strings.
There is of course no unique answer to this.
substring("xaxbxcyaybzc", seq(from=1,to=11,by=2), seq(from=2,to=12,by=2))
is another solution. You didn't say you *had* to use rep.
It's not the answer that matters for an exercise like this.
It's how you get there.
On Tue, 5 Nov 2019 at 23:40, Chandeep Kaur <chandeep.virdi using gmail.com> wrote:
>
> Dear Team,
>
> Could you please help me with the below question? How can I get the desired
> output?
>
> Produce the following sequence using only rep(), seq() and potentially
> other functions/operators. You must not use c() nor explicit loops
>
> “xa” “xb” “xc” “ya” “yb” “zc”
>
> Thanks & Regards,
>
> Chandeep Kaur
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list