[R] bug in interaction order when using drop?

From: Petr Pikal <petr.pikal_at_precheza.cz>
Date: Fri 11 Aug 2006 - 00:32:54 EST


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@precheza.cz

R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Fri Aug 11 00:43:00 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Fri 11 Aug 2006 - 02:22:31 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.