2014-06-04 18 views
12

expand.grid ile ilgili bir sorun yaşıyorum. Komut dizimin en üstünde belirttiğim seçenekleri göz ardı ediyor gibi görünüyor. xmaple içinexpand.grid neden seçenekleri görmezden geliyor?

:

options(stringsAsFactors = FALSE) 
tmp <- expand.grid(x = letters, y = 1:10) 

döner: Yanlış yapıyorum

> str(tmp) 
'data.frame': 260 obs. of 2 variables: 
$ x: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ y: int 1 1 1 1 1 1 1 1 1 1 ... 
- attr(*, "out.attrs")=List of 2 
    ..$ dim  : Named int 26 10 
    .. ..- attr(*, "names")= chr "x" "y" 
    ..$ dimnames:List of 2 
    .. ..$ x: chr "x=a" "x=b" "x=c" "x=d" ... 
    .. ..$ y: chr "y= 1" "y= 2" "y= 3" "y= 4" ... 

?

+3

argüman sert kodlanmış olduğundan, default.stringsAsFactors() 'olarak ayarlanmak yerine. Belki de kalın bir cildiniz varsa, potansiyel bir değişim olarak ortaya çıkabileceği tartışılan bir şey. – joran

+6

'? Options'' seçenekleri (stringsAsFactors = FALSE) 'sadece' data.frame' ve 'read.table' etkileyeceğini önerir: '' stringsAsFactors ':' data.frame 've' read 'argümanları için varsayılan ayar. tablo'." –

cevap

15

Bunun nedeni, expand.grid'un işlev argümanı varsayılanının TRUE olarak ayarlanmış olmasıdır.

> head(expand.grid) 

1 function (..., KEEP.OUT.ATTRS = TRUE, stringsAsFactors = TRUE) 
2 {                
3  nargs <- length(args <- list(...))       
4  if (!nargs)             
5   return(as.data.frame(list()))       
6  if (nargs == 1L && is.list(a1 <- args[[1L]])) 

Ve bu örneğin read.table() sağlanan varsayılan değerden farklı: Sadece bir R oturumdan ?expand.grid veya head(expand.grid) yazarsanız, olmaya işlevi tanımı göreceksiniz

> head(read.table) 
1 function (file, header = FALSE, sep = "", quote = "\\"'", dec = ".",   
2  row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA",  
3  colClasses = NA, nrows = -1, skip = 0, check.names = TRUE,    
4  fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, 
5  comment.char = "#", allowEscapes = FALSE, flush = FALSE,     
6  stringsAsFactors = default.stringsAsFactors(), fileEncoding = "",  

Burada default.stringsAsFactors() temel olarak getOption("stringsAsFactors") döndürecektir.

Bu nedenle, bunu açıkça ayarlamanız gerekir. açıklama @Arun ek olarak

14

, sen expand.grid sarabilirsiniz:

expand_grid <- 
    function(...,stringsAsFactors= getOption("stringsAsFactors")) 
    expand.grid(...,stringsAsFactors=stringsAsFactors) 

Eğer yeni işlevi uygulamak Şimdi eğer, istediğiniz türü olsun:

options(stringsAsFactors = FALSE) 
tmp <- expand_grid(x = letters, y = 1:10) 
str(tmp,max=1) 
## 'data.frame': 260 obs. of 2 variables: 
## $ x: chr "a" "b" "c" "d" ... 
## $ y: int 1 1 1 1 1 1 1 1 1 1 ... 
## - attr(*, "out.attrs")=List of 2 
İlgili konular