为什么expand.grid会忽略选项?

为什么expand.grid会忽略选项?,r,R,我的扩展.grid有问题。它似乎忽略了我在脚本顶部设置的选项 对于exmaple: options(stringsAsFactors = FALSE) tmp <- expand.grid(x = letters, y = 1:10) 我做错了什么?这是因为expand.grid的函数参数默认值设置为TRUE。如果您只是在R会话中键入?expand.grid或head(expand.grid),您将看到函数定义为: > head(expand.grid) 1 function (

我的
扩展.grid
有问题。它似乎忽略了我在脚本顶部设置的选项

对于exmaple:

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

我做错了什么?

这是因为
expand.grid
的函数参数默认值设置为
TRUE
。如果您只是在R会话中键入
?expand.grid
head(expand.grid)
,您将看到函数定义为:

> 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]]))
其中
default.stringsAsFactors()
将返回基本上
getOption(“stringsAsFactors”)


因此,您必须明确地设置它。

除了@Arun explain之外,您还可以包装
expand.grid

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

展开网格,因为参数是硬编码的,而不是设置为
default.stringsAsFactors()
。我想,如果你有厚脸皮,可能会引起潜在的变化。
?options
表明
options(stringsAsFactors=FALSE)
只会影响
data.frame
read.table
:“'stringsAsFactors':参数'data.frame'和'read.table'的默认设置。”
> 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 = "",    
 expand_grid <- 
   function(...,stringsAsFactors= getOption("stringsAsFactors"))
     expand.grid(...,stringsAsFactors=stringsAsFactors)
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