2016-12-28 121 views
0
data <- sqlQuery(connection, "SELECT col1, col2, col3 FROM table1") 

d <- data.frame(data, stringsAsFactors = FALSE) 

data.frame()中的stringsAsFactors如何工作?在这种情况下

transform(d, col1 = as.character(col1), stringsAsFactors = FALSE) 

d仍然有factor类型列。

str(d) 

'd': 1943 obs. of 4 variables: 
$ col1: Factor w/ 5 levels .... 

但是当我第一个状态;

options(stringsAsFactors = FALSE) 

它的工作原理,但它设置全球。为什么内幕陈述无效?

+0

'data'本身我想''col1'作为'factor'的'data.frame'。 'stringsAsFactors = FALSE'分别将'col1'变量添加到'd' –

+0

什么是'data'?请参考示例[这里](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)为了改善您的问题。我很肯定,在创建一个可重现的例子时,你会明白,这是极不可能的,data.frame()中的* stringsAsFactors不起作用* –

+0

你应该仔细阅读'?data.frame'。每一个参数都被强制为一个'data.frame'。所以,如果任何参数已经是'data.frame',则没有任何变化。新字符列根据'stringsAsFactors'进行强制转换。对于'transform'部分,请记住它不会通过引用*更改函数参数*,所以您应该将结果赋值回:'d <-transform(d,col1 = as.character(col1))'(注意这里'stringsAsFactors'参数不是必需的)。 – nicola

回答

2

阐述大卫阿伦斯堡的评论,请尝试

data <- sqlQuery(connection, "SELECT col1, col2, col3 FROM table1", stringsAsFactors = FALSE) 

包的帮助页面?sqlQueryRODBC说:

sqlQueryRODBC的主力作用。它将SQL语句查询发送到服务器,并通过sqlGetResults检索(部分或全部)结果。

sqlQuery...参数其他参数将被传递给sqlGetResults

综观sqlGetResults使用部分(相同的帮助页面上),你会发现,有一种说法stringsAsFactors它使用以下默认:

stringsAsFactors = default.stringsAsFactors()

相关问题