i wrote a function where the individual if statements execute ok. If I place them in a for loop I get NA's as a result. I can't find my error.
Total data:
ID L a b DE heightmm L1 C h SDL SDa SDb
1 ClearHelder 58.83333 -2.2566667 1.070000 58.88333 17.666667 58.83333 2.50000 154.58333 1.6015721 0.08386497 0.09165151
2 Donkerblauw 32.26000 -0.3266667 -20.000000 37.97333 18.666667 32.26000 20.00333 269.06667 1.8712830 0.10692677 0.28844410
3 Donkerbruin 28.94333 5.1400000 14.843333 32.93333 21.666667 28.94333 15.71333 70.90000 0.6978777 0.17000000 0.58320951
4 Donkergeel 63.95667 -7.4466667 64.166667 90.91333 14.333333 63.95667 64.60000 96.62000 0.7595613 0.63263997 2.22554113
5 Donkergroen 37.16667 -23.6800000 14.546667 46.50333 10.333333 37.16667 27.79333 148.44667 2.7307569 0.45639895 0.67352308
6 Donkeroranje 49.57000 27.5033333 44.026667 71.78667 9.666667 49.57000 51.92000 58.01333 0.6242596 1.34001244 0.88793769
7 Donkerroodpaars 29.04333 31.3800000 10.813333 44.11000 16.000000 29.04333 33.18667 18.84333 0.8207517 0.94620294 0.49217206
8 Lichtblauw 45.72667 -5.7100000 -15.270000 48.54667 23.666667 45.72667 16.30333 249.48333 1.5023093 0.11269428 0.28160256
9 Lichtbruin 32.04500 5.4100000 14.105000 35.43000 7.500000 32.04500 15.10500 68.98000 0.4313351 0.15556349 0.61518290
10 Lichtekleur 51.35167 5.6366667 24.020000 56.99667 19.166667 51.35167 24.69667 76.68667 0.7655695 0.98627920 1.85564005
11 Lichtgroenturq 45.85333 -22.5466667 2.786667 51.18333 8.333333 45.85333 22.71667 172.96333 1.6453672 0.68002451 0.32807519
12 Opakblauw 42.67333 -15.7466667 -31.030000 55.07000 11.333333 42.67333 34.81000 243.09333 1.4786931 1.07342132 0.51507281
13 Opakgeel 73.33333 7.5233333 46.960000 87.41667 8.666667 73.33333 47.59667 80.88667 2.4552868 0.25716402 1.87032083
14 Opakoranje 55.70667 34.0666667 51.026667 82.90667 7.333333 55.70667 61.26000 52.87667 2.8837707 0.73432509 3.61903763
15 Opakrood 39.53333 38.4266667 21.303333 57.30333 8.333333 39.53333 43.95333 28.93000 5.4392769 1.78146943 2.51213720
16 Witopak 83.64000 -1.2566667 1.333333 83.66000 10.333333 83.64000 1.85000 134.26000 0.6187891 0.09865766 0.40869712
SDDE SDheightmm SDL1 SDC SDh hex
1 1.6015721 1.1547005 1.6015721 0.03605551 2.6510815 #8A8F8C
2 1.4758500 1.5275252 1.8712830 0.28290163 0.3265476 #354E6B
3 0.5753550 0.5773503 0.6978777 0.60177515 0.3395585 #54412E
4 1.6346967 1.5275252 0.7595613 2.24006696 0.5111751 #AC9C14
5 1.7712801 1.1547005 2.7307569 0.73934656 0.7169612 #34613F
6 0.8957864 0.5773503 0.6242596 1.07670795 1.3266625 #B0622A
7 0.6260192 1.0000000 0.8207517 1.04987301 0.5450076 #732E35
8 1.5027419 0.5773503 1.5023093 0.27790886 0.4292241 #507085
9 0.1697056 0.7071068 0.4313351 0.51618795 1.3717872 #5B4836
10 1.0754844 3.7638633 0.7655695 1.72036818 2.8469891 #917652
11 1.3748576 0.5773503 1.6453672 0.70528954 0.6739683 #3F7767
12 1.2285357 1.5275252 1.4786931 0.15524175 1.9444879 #466889
13 1.7842178 1.1547005 2.4552868 1.85564903 0.6591914 #DBAD5D
14 3.2132434 1.5275252 2.8837707 2.94001701 4.2746852 #CC6B2B
15 0.8280902 1.5275252 5.4392769 2.75884638 1.8218946 #9C3F3D
16 0.6255398 0.5773503 0.6187891 0.25357445 10.3321198 #CFD1CE
Trun data:
Sample Time L C h L1 a b DE heihgtmm hex
1 Sample 1 10:51:04 AM 57.61 4.56 219.98 57.61 -3.49 -2,93 36.52 53.10 <NA>
2 Sample 2 10:51:05 AM 57.16 4.17 226.13 57.16 -2.89 -3,01 36.95 67.01 <NA>
3 Sample 3 10:51:06 AM 53.96 5.14 233.39 53.96 -3.06 -4,13 40.24 80.16 <NA>
4 Sample 4 10:51:07 AM 57.30 3.90 221.78 57.30 -2.91 -2,6 36.78 85.30 <NA>
5 Sample 5 10:51:08 AM 55.27 3.63 213.56 55.27 -3.03 -2,01 38.77 86.37 <NA>
6 Sample 6 10:51:09 AM 57.90 3.47 214.16 57.90 -2.87 -1,95 36.13 92.36 <NA>
The code for one line execution:
for(i in 1:nrow(Trun)){
if (Trun$L[i] > Total$L[1]-Total$SDL[1] & Trun$L[i] < Total$L[1]+Total$SDL[1]){
Trun$hex[i] <- Total$hex[1]
}}
This gives the right result:
Sample Time L C h L1 a b DE heihgtmm hex
1 Sample 1 10:51:04 AM 57.61 4.56 219.98 57.61 -3.49 -2,93 36.52 53.10 #8A8F8C
2 Sample 2 10:51:05 AM 57.16 4.17 226.13 57.16 -2.89 -3,01 36.95 67.01 <NA>
3 Sample 3 10:51:06 AM 53.96 5.14 233.39 53.96 -3.06 -4,13 40.24 80.16 <NA>
4 Sample 4 10:51:07 AM 57.30 3.90 221.78 57.30 -2.91 -2,6 36.78 85.30 #8A8F8C
5 Sample 5 10:51:08 AM 55.27 3.63 213.56 55.27 -3.03 -2,01 38.77 86.37 <NA>
6 Sample 6 10:51:09 AM 57.90 3.47 214.16 57.90 -2.87 -1,95 36.13 92.36 #8A8F8C
Making a function with multiple similar statements in a variable:
colortest <- function(x){
for ( i in 1:nrow(x)){
if (x$L[i] > Total$L[1]-Total$SDL[1] & x$L[i] < Total$L[1]+Total$SDL[1]){
x$hex[i] <- Total$hex[1]
}else if(x$L[i] > Total$L[2]-Total$SDL[2] & x$L[i] < Total$L[2]+Total$SDL[2]){
x$hex[i] <- Total$hex[2]
}else if (x$L[i] > Total$L[3]-Total$SDL[3] & x$L[i] < Total$L[3]+Total$SDL[3]){
x$hex[i] <- Total$hex[3]
}else if (x$L[i] > Total$L[4]-Total$SDL[4] & x$L[i] < Total$L[4]+Total$SDL[4]){
x$hex[i] <- Total$hex[4]
}else if (x$L[i] > Total$L[5]-Total$SDL[5] & x$L[i] < Total$L[5]+Total$SDL[5]){
x$hex[i] <- Total$hex[5]
}else if (x$L[i] > Total$L[6]-Total$SDL[6] & x$L[i] < Total$L[6]+Total$SDL[6]){
x$hex[i] <- Total$hex[6]
}else if (x$L[i] > Total$L[7]-Total$SDL[7] & x$L[i] < Total$L[7]+Total$SDL[7]){
x$hex[i] <- Total$hex[7]
}else if (x$L[i] > Total$L[8]-Total$SDL[8] & x$L[i] < Total$L[8]+Total$SDL[8]){
x$hex[i] <- Total$hex[8]
}else if (x$L[i] > Total$L[9]-Total$SDL[9] & x$L[i] < Total$L[9]+Total$SDL[9]){
x$hex[i] <- Total$hex[9]
}else if (x$L[i] > Total$L[10]-Total$SDL[10] & x$L[i] < Total$L[10]+Total$SDL[10]){
x$hex[i] <- Total$hex[10]
}else if (x$L[i] > Total$L[11]-Total$SDL[11] & x$L[i] < Total$L[11]+Total$SDL[11]){
x$hex[i] <- Total$hex[11]
}else if (x$L[i] > Total$L[12]-Total$SDL[12] & x$L[i] < Total$L[12]+Total$SDL[12]){
x$hex[i] <- Total$hex[12]
}else if (x$L[i] > Total$L[13]-Total$SDL[13] & x$L[i] < Total$L[13]+Total$SDL[13]){
x$hex[i] <- Total$hex[13]
}else if (x$L[i] > Total$L[14]-Total$SDL[14] & x$L[i] < Total$L[14]+Total$SDL[14]){
x$hex[i] <- Total$hex[14]
}else if (x$L[i] > Total$L[15]-Total$SDL[15] & x$L[i] < Total$L[15]+Total$SDL[15]){
x$hex[i] <- Total$hex[15]
}else if (x$L[i] > Total$L[16]-Total$SDL[16] & x$L[i] < Total$L[16]+Total$SDL[16]){
x$hex[i] <- Total$hex[16]
}
}}
execute colortest(Trun) gives the result with the NA's:
Sample Time L C h L1 a b DE heihgtmm hex
1 Sample 1 10:51:04 AM 57.61 4.56 219.98 57.61 -3.49 -2,93 36.52 53.10 <NA>
2 Sample 2 10:51:05 AM 57.16 4.17 226.13 57.16 -2.89 -3,01 36.95 67.01 <NA>
3 Sample 3 10:51:06 AM 53.96 5.14 233.39 53.96 -3.06 -4,13 40.24 80.16 <NA>
4 Sample 4 10:51:07 AM 57.30 3.90 221.78 57.30 -2.91 -2,6 36.78 85.30 <NA>
5 Sample 5 10:51:08 AM 55.27 3.63 213.56 55.27 -3.03 -2,01 38.77 86.37 <NA>
6 Sample 6 10:51:09 AM 57.90 3.47 214.16 57.90 -2.87 -1,95 36.13 92.36 <NA>
What must I change in the function to make the if lines work just like the individual example?
Aucun commentaire:
Enregistrer un commentaire