我在解决R中的任务时遇到了麻烦。
基本上,我给了一个字符串,这里是生日日期,并且应该以某种方式将其转换为数字值作为rgb
函数的输入。在我太神秘之前,请阅读作业说明:
给定一个带有生日的字符串,如下图所示,创建一个显示该人生日颜色的图表。
生日颜色是使用月,日和年的日期作为rgb()函数的索引来定义的。月份的日期表示我们想要的颜色多少红色,绿色的月份和蓝色表示的年份。您可以假设所有月份都有31天。关于岁月,假设每个打算使用生日颜色功能的人都是在1915年或之后出生。下面你可以看到我的生日颜色是蓝绿色,而我儿子的颜色是蓝绿色。
提示:最初的步骤之一应该是将字符串拆分为单独的元素,并确保随后将这些元素转换为数值。
birthday <- "02-10-1972"
calcBirthdayColor <- function(bd) {
## your code here
}
plot(0,type="n",
axes=FALSE,ylab="",xlab="",
xlim=c(-10,10),ylim=c(-10,10),asp=1)
## My birthday color:
rect(-10,-6,10,6,col=calcBirthdayColor(birthday))
## And the color of my son:
rect(-6,-10,6,10,col=calcBirthdayColor("10-09-2013"))
另外还要问以下问题:
http://i.imgur.com/wrkfhMQ.png
我最初的猜测是,在转换为数字后,可以在rgb
中插入出生日期字符串'01 -10-1972',但这不起作用,因为{{1}是错的,例如RGB(1,10,1972)
即使我把它改成大于1972年的东西(比如说1,10,1972,2015),我也得不到我给出的矩形的近似颜色。
如何使出生日期格式符合maxColorValue
函数?
我很感激你的暗示。
答案 0 :(得分:0)
为了它的乐趣:
calcBirthdayColor <- function(birthday) {
do.call(rgb, as.list(setNames(
(as.numeric(strsplit(birthday, "-")[[1]]) / c(31, 12, 1) -
c(0, 0, 1915) ) /
c(1, 1, 2015-1915),
c("red", "green", "blue"))))}
plot(0, type="n",
axes=FALSE,ylab="",xlab="",
xlim=c(-10,10),ylim=c(-10,10),asp=1)
## My birthday color:
rect(-10,-6,10,6,col=calcBirthdayColor(birthday))
## And the color of my son:
rect(-6,-10,6,10,col=calcBirthdayColor("10-09-2013"))
# red
rect(-3,-3,3,3,col=calcBirthdayColor("31-01-1915"))
答案 1 :(得分:0)
同样,我今天在Uni的另一个R课程中编写了一个解决方案。看起来不如上面的那么优雅,但效果一样好。
感谢您的帮助!
birthday <- "02-10-1972"
calcBirthdayColor <- function(birthday) {
bd.colour <- rgb(as.numeric(strsplit(birthday, "-")[[1]])[1]/31,
as.numeric(strsplit(birthday, "-")[[1]])[2]/12,
((as.numeric(strsplit(birthday, "-")[[1]])[3])-1915) /100)
plot(0,type="n",
axes=FALSE,ylab="",xlab="",
xlim=c(-10,10),ylim=c(-10,10),asp=1)
rect(-10,-6,10,6, col=bd.colour)
}
calcBirthdayColor(birthday)