将带有DBI包的R附加到SQL Server数据库时,字符列将转换为数字

问题描述 投票:0回答:1

我有一个使用Microsoft SQL Server托管的数据库。它的表project包含列project_idint identity),project_codenvarchar not null)和api_formnvarchar)。我已使用R中的DBI程序包连接到此程序,并运行了以下代码。

dbAppendTable(conn, 'project', data.frame(
  project_code = c("ABC123", "DEF456"),
  api_form = c(NA, NA)
))

但是当我查询整个表时,得到以下输出。

project_id  project_code    api_form
1   1   NULL
2   2   NULL

我不确定为什么现在的字符是整数。有没有一种方法可以将字符数据直接添加到表中,或者,如果这是预期的行为,如何查询表以查找输入的实际文本?

sql r sql-server dbi
1个回答
1
投票

data.frame()调用的经典忽略,默认情况下将字符串转换为因子。您的project_code呈现为因子(即带有标签值的数字列)而非字符。要解决此问题,只需传递stringsAsFactors=FALSE,以便将实际字符值附加到数据库表中:

dbAppendTable(conn, 'project', 
              data.frame(
                 project_code = c("ABC123", "DEF456"),
                 api_form = c(NA, NA),
                 stringsAsFactors=FALSE 
              )
)

或者,将R会话中所有data.frame()调用的参数设置为全局选项:

options(stringsAsFactors = FALSE)

dbAppendTable(conn, 'project', 
              data.frame(
                 project_code = c("ABC123", "DEF456"),
                 api_form = c(NA, NA) 
              )
)
© www.soinside.com 2019 - 2024. All rights reserved.