我正在尝试创建一个函数,将0到100之间的数字转换为十六进制颜色,可用于以后的绘图。这些数据适用于以下形式的一系列淡水健康评分:
ID ......... .........指示器短.............分数
1 ..........水质...... WQual .............. 81
2 ..........盆地状况..BC ................. 85
3 ..........水量...... WQuan ........... 66
4 ..........生物多样性.....生物............ ........ 43
要操纵数据,我使用的是包CREATE SYMMETRIC KEY SQLSymKey
WITH ALGORITHM = AES_128
ENCRYPTION BY CERTIFICATE SelfSignedCertificate;
,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
试图直接调用每个红色,绿色和蓝色列,但它会产生相同的结果,就像尝试将Indicator_colours转换为data.table并使用FHI_scores_2<-plyr::ddply(FHI_scores_1,.(), transform,
Score_cols=rgb(.(Indicator_colours[,1], Indicator_colours[,2],
Indicator_colours[,3]), maxColorValue=256))
运算符一样。
任何有关如何解决这个问题的帮助都会非常感激,毫无疑问我错过了一些非常简单的事情。
答案 0 :(得分:0)
我想出了一个解决方案。 首先,我将颜色方案的定义移到了函数
之外doInBackground
然后我将红色,绿色和蓝色输出附加到原始数据帧并从那里计算出十六进制。
Col_ramp<-colorRamp(matlab.like2(800))
如果有人能提供更优雅的解决方案,我将不胜感激。