Я пытаюсь создать функцию, которая преобразует число от 0 до 100 в шестнадцатеричный цвет, который можно использовать для последующего построения. Данные приведены для ряда показателей здоровья пресной воды в форме:
ID ......... индикатор ......... Short ............. оценка
1 .......... Качество воды .... WQual .............. 81
2 .......... Состояние бассейна .. BC ................. 85
3 .......... Количество воды ... WQuan ........... 66
4 .......... Биоразнообразие ..... Био ............ ........ 43
Для манипулирования данными я использую пакеты plyr
, colorRamp
и data.frame
.
Функция ниже:
FHI_col<-function(x, Col_ramp, Indicator_colours){
##first I need to convert each score to fit the colorRamp
FHI_scores_1<-plyr::ddply(x,.(Score), transform,
Score_1 = 1-(Score/100))
##define the colorscheme using the colorRamp package
Col_ramp<-colorRamp(matlab.like2(800))
##convert the scores into red, green and blue
Indicator_colours<-Col_ramp(FHI_scores_1$Score_1)
## convert red, green, blue colors into hexidecimal format and add to dataframe
## this is where it goes wrong!
FHI_scores_2<-plyr::ddply(FHI_scores_1,.(), transform,
Score_cols=rgb(.(Indicator_colours), maxColorValue=256))
##additional tidying up for export
FHI_scores_3 <- as.data.table(FHI_scores_2)
FHI_scores_4 <-FHI_scores_3[Score==0, Score_cols := "grey60"]
FHI_scores_5 <- FHI_scores_4[order(ID),]
return(FHI_scores_5)
}
Когда я запускаю функцию для набора данных указанного типа, я получаю сообщение об ошибке
Error in rgb(.(Indicator_colours:
argument "green" is missing, with no default
Если я запускаю тот же код, что и отдельные команды, я получаю желаемый результат. Однако попытка связать их вместе в функции приводит к этой ошибке. Если Indicator_colours
находится вне функции, значит, она работает!
Я пробовал различные варианты оскорбительной строки, такие как:
FHI_scores_2<-plyr::ddply(FHI_scores_1,.(), transform,
Score_cols=rgb(.(Indicator_colours[,1], Indicator_colours[,2],
Indicator_colours[,3]), maxColorValue=256))
в попытке напрямую вызвать каждый красный, зеленый и синий столбец, но он дает тот же результат, что и попытка преобразовать Indicator_colours в таблицу data.table с использованием оператора $
.
Любая помощь в том, как это исправить, будет принята с благодарностью, без сомнения, я упускаю что-то довольно простое.