[R] bug in interaction order when using drop?

Petr Pikal petr.pikal at precheza.cz
Thu Aug 10 16:32:54 CEST 2006


Hallo all

> version
               _                                     
platform       i386-pc-mingw32                       
arch           i386                                  
os             mingw32                               
system         i386, mingw32                         
status         beta                                  
major          2                                     
minor          3.1                                   
year           2006                                  
month          05                                    
day            23                                    
svn rev        38179                                 
language       R                                     
version.string Version 2.3.1 beta (2006-05-23 r38179)
>

When I use interaction(....) without drop=T parameters I will get 
neatly organized factor with "protiproud" and "souproud" aligned.

> levels(interaction(vykon, teplota, proudeni))
 [1] "3.750.protiproud"  "12.750.protiproud" "3.775.protiproud"  
"12.775.protiproud" "3.800.protiproud"  "12.800.protiproud"
 [7] "3.825.protiproud"  "12.825.protiproud" "3.850.protiproud"  
"12.850.protiproud" "3.750.souproud"    "12.750.souproud"  
[13] "3.775.souproud"    "12.775.souproud"   "3.800.souproud"    
"12.800.souproud"   "3.825.souproud"    "12.825.souproud"  
[19] "3.850.souproud"    "12.850.souproud"  

However when I use 

> levels(interaction(vykon, teplota, proudeni, drop=T))
[1] "3.775.protiproud"  "3.800.souproud"    "3.750.souproud"    
"12.850.souproud"   "12.825.protiproud"

everything is out of order. I know I can reorder any factor according 
to my wish but it would be good to have it ordered same way as 
without using drop.

Everything comes from unique in

if (drop) {
        f <- unique(ans[!is.na(ans)])
        ans <- match(ans, f)
        lvs <- lvs[f]
}

maybe it can be modified.

if (drop) {
        f <- unique(ans[!is.na(ans)])
        ord <- order(f)
        ans <- match(ans, f)
        lvs <- lvs[f[ord]]
        }

which seems to work but I am not sure if it does not makes problems 
having NA in data.

Here is my data frame.
Thank you 

Petr Pikal

> dump("df", file=stdout()) 
df <-
structure(list(proudeni = structure(as.integer(c(1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 
1, 1, 1)), .Label = c("protiproud", "souproud"), class = "factor"), 
    vykon = as.integer(c(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 3, 3, 3, 3, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 
    12, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
    3, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 3, 3, 
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12, 12, 12, 
    12, 12, 12, 12, 12, 12, 12, 12, 12, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12, 12, 12, 12, 12, 12, 
    12, 12, 12, 12, 12, 12)), teplota = as.integer(c(775, 775, 
    775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
    775, 775, 775, 775, 800, 800, 800, 800, 800, 800, 800, 800, 
    800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 750, 850, 
    850, 850, 850, 850, 850, 825, 825, 825, 825, 825, 825, 775, 
    775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
    775, 775, 775, 775, 775, 800, 800, 800, 800, 800, 800, 800, 
    800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 750, 
    850, 850, 850, 850, 850, 850, 825, 825, 825, 825, 825, 825, 
    775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
    775, 775, 775, 775, 775, 775, 800, 800, 800, 800, 800, 800, 
    800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 
    750, 850, 850, 850, 850, 850, 850, 825, 825, 825, 825, 825, 
    825, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
    775, 775, 775, 775, 775, 775, 775, 800, 800, 800, 800, 800, 
    800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 
    800, 750, 850, 850, 850, 850, 850, 850, 825, 825, 825, 825, 
    825, 825))), .Names = c("proudeni", "vykon", "teplota"), 
row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", 
"36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", 
"47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", 
"58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", 
"69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", 
"80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", 
"91", "92", "93", "94", "95", "96", "97", "98", "99", "100", 
"101", "102", "103", "104", "105", "106", "107", "108", "109", 
"110", "111", "112", "113", "114", "115", "116", "117", "118", 
"119", "120", "121", "122", "123", "124", "125", "126", "127", 
"128", "129", "130", "131", "132", "133", "134", "135", "136", 
"137", "138", "139", "140", "141", "142", "143", "144", "145", 
"146", "147", "148", "149", "150", "151", "152", "153", "154", 
"155", "156", "157", "158", "159", "160", "161", "162", "163", 
"164", "165", "166", "167", "168", "169", "170", "171", "172", 
"173", "174", "175", "176", "177", "178", "179", "180", "181", 
"182", "183", "184", "185", "186", "187", "188", "189", "190", 
"191", "192", "193", "194", "195", "196"), class = "data.frame")
> Petr Pikal
petr.pikal at precheza.cz



More information about the R-help mailing list