регулярное выражение работает по-другому в R, когда функция из другого скрипта - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть два сценария R:

test1.R

fun1 <- function(x){
  gsub("²","2", x)
}

test2.R

source("test1.R")

fun2 <- function(x){
  gsub("²","2", x)
}

x <- "A²"

fun1(x)
fun2(x)

Я ожидаю, что результаты fun1 и fun2 будут одинаковыми. Но если я запускаю код в test2.R, я получаю.

> fun1(x)
[1] "A²"

> fun2(x)
[1] "A2"

Почему результаты отличаются и как я могу получить fun1, чтобы дать тот же результат, что и fun2? Я использую RStudio 1.2.5019 и моя системная информация:

> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)

Matrix products: default

Random number generation:
 RNG:     Mersenne-Twister 
 Normal:  Inversion 
 Sample:  Rounding 

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252    LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.6.1 tools_3.6.1 

1 Ответ

0 голосов
/ 20 апреля 2020

Убедитесь, что оба файла имеют одинаковую кодировку (предпочтительно UTF-8). Используйте Save with encoding ... от RStudio. Если проблема все еще существует, попробуйте скопировать "²" на консоль R, чтобы проверить, действительно ли они одинаковы ("²" == "²").

Обновление:

Как проблема все еще сохраняются, вы можете попробовать:

  1. source("test1.R", encoding="UTF-8")
  2. eval(parse("test1.R", encoding="UTF-8"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...