将文件的source()更改为函数中的BOM字符

时间:2018-10-26 18:55:47

标签: r byte-order-mark rmysql

我有一个set pro文件,其中包含几个函数,其中一个定义为:

.R

请注意,有一个get_entry_detail <- function(con, vec_of_entryids){ query <- paste0("select entryId, fieldName, fieldValue from `hthu-eligibility`.entry_detail where entryId in (", paste(vec_of_entryids, collapse = ","), ");") dbGetQuery(con, query) %>% mutate(fieldName = ifelse(fieldName == "firstName", gsub(paste(c(""), collapse = "|"), "", fieldName), fieldName)) } mutate()时会剥离

fieldName == "firstName"将此文件放在另一个source()文件的顶部,但是当我在采购文件后查看该函数时,该函数已更改为:

.R

现在> source("R/get_join_employee_data_userid.R") > get_entry_detail function(con, vec_of_entryids){ query <- paste0("select entryId, fieldName, fieldValue from `hthu-eligibility`.entry_detail where entryId in (", paste(vec_of_entryids, collapse = ","), ");") dbGetQuery(con, query) %>% mutate(fieldName = ifelse(fieldName == "firstName", gsub(paste(c(""), collapse = "|"), "", fieldName), fieldName)) } 已更改为。这会导致以后的功能失败,因为没有需要删除,因此以后的连接失败。

如何防止这种情况发生?我无法调整数据库结构。

2 个答案:

答案 0 :(得分:1)

文件的编码取决于操作系统。在我的Linux机器上,您的示例运行没有问题。 Linux使用UTF-8作为默认编码。但是,Windows使用系统的默认编码,该编码可能与UTF-8不同。

因此,在encoding="UTF-8"中明确指定source()应该可以解决此问题:

source("R/get_join_employee_data_userid.R", encoding="UTF-8")

答案 1 :(得分:0)

This answer提供了一个解决方案。现在我的函数如下:

get_entry_detail <- function(con, vec_of_entryids){

  dbSendQuery(con, 'set character set "utf8"')

  query <- paste0("select entryId, fieldName, fieldValue
                         from `hthu-eligibility`.entry_detail
                  where entryId in (", paste(vec_of_entryids, collapse = ","), ");")

  dbGetQuery(con, query)
}

尽管我仍然不知道为什么在源文件而不是直接读取文件时更改了字符。