source () в файле изменяет символы спецификации в функции - PullRequest
0 голосов
/ 26 октября 2018

У меня есть файл .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",

I 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 голосов
/ 05 ноября 2018

Кодировка файлов зависит от ОС. На моей машине с Linux ваш пример работает без проблем. Linux использует UTF-8 в качестве кодировки по умолчанию. Однако Windows использует кодировку системы по умолчанию, которая может отличаться от UTF-8.

Следовательно, явное указание encoding="UTF-8" в source() должно решить проблему:

source("R/get_join_employee_data_userid.R", encoding="UTF-8")
0 голосов
/ 30 октября 2018

Этот ответ предоставил решение.Теперь моя функция выглядит следующим образом:

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)
}

, хотя я до сих пор не знаю, почему символы менялись, когда я искал файл, а не читал его напрямую.

...