[R] bug in interaction order when using drop?

Petr Pikal petr.pikal at precheza.cz
Thu Aug 10 17:12:34 CEST 2006


Ooops, my first suggestion reorders factor itself but

if (drop) factor(ans) else ans

instead of whole drop construction shall preserve levels order 
without changing order of factor

Petr

On 10 Aug 2006 at 16:32, Petr Pikal wrote:

From:           	"Petr Pikal" <petr.pikal at precheza.cz>
To:             	r-help at stat.math.ethz.ch
Date sent:      	Thu, 10 Aug 2006 16:32:54 +0200
Priority:       	normal
Subject:        	[R] bug in interaction order when using drop?

> 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
> 
> ______________________________________________
> R-help at 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.

Petr Pikal
petr.pikal at precheza.cz



More information about the R-help mailing list