2015-01-15 2 views
-4

У меня есть проблемы, решая задание в R.Преобразования строки в RGB, а затем построить его

В принципе, я даюсь строка, здесь дата рождения, и должен каким-то образом преобразовать это числовое значение в качестве входных данных для 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

Моя первоначальная догадка, что после перехода на цифры, даты рождения, как строки '01 -10-1972' может быть вставлен в rgb, но это не работает, потому что maxColorValue ошибочен, например rgb (1,10,1972)

Даже если я изменю его на нечто большее 1972 года (скажем, 1,10,1972,2015), я не получаю приблизительные цвета прямоугольников, которые мне дали.

Как мне установить формат даты рождения в функцию rgb?

Я благодарен вам за любой намек.

+2

Что вы пытаетесь решить домашнее задание самостоятельно – Rentrop

+0

Разве не упоминается о 1915 году? –

+0

Дорогой Floo0, Прежде, чем я буду кодировать все, что преобразует I строку, я экспериментировал с функцией rgb и как я мог адекватно помещать день, месяц и год, но поиск в googling и помощь не помогли мне ... Прости. Дорогой Марк Рэнсом, Точно, это моя точка зрения. Это не дает мне подсказки! Я думал об этом явно не произвольном количестве, но нет. Маленький намек? – Wurtzinator

ответ

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")) 
+0

Я лично считаю, что '1-1-1915' должен масштабироваться до' 0, 0, 0' до '# 000000'. Для op, ярко-красный должен быть 1 декабря 1915 года. – Vlo

0

большое спасибо! Теперь, я понимаю ... мне потребовалось некоторое время, хотя ... Я новичок.

Аналогичным образом, я кодировал решение в течение другого класса R в Uni сегодня. Выглядит немного менее элегантно, чем выше, но работает так же хорошо.

Спасибо за помощь!

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) 
+0

Поздравляем. Тбх, я думаю, это так же изящно, как и мое. ;-) R имеет крутую кривую обучения, но после того, как вы сделали первые шаги, вам очень нравится работать. – lukeA

Смежные вопросы