Подтвердить что ты не робот

Игнорировать escape-символы (обратную косую черту) в R-строках

При запуске R-плагина в SPSS я получаю строку пути Windows в качестве входного файла, например.

'C:\Users\mhermans\somefile.csv'

Я хотел бы использовать этот путь в следующем R-коде, но тогда косые черты должны быть заменены прямыми косыми чертами, иначе R интерпретирует их как escape-последовательности (например, "\ U, используемые без шестнадцатеричных цифр" ).

Однако мне не удалось найти функцию, которая может заменить обратную косую черту косой чертой или удвоить ее. Все эти функции предполагают, что эти символы экранированы.

Итак, есть ли что-то вроде:

>gsub('\\', '/', 'C:\Users\mhermans')
C:/Users/mhermans
4b9b3361

Ответ 1

Вы можете попробовать использовать аргумент allowEscapes в scan()

X=scan(what="character",allowEscapes=F)
C:\Users\mhermans\somefile.csv

print(X)
[1] "C:\\Users\\mhermans\\somefile.csv"

Ответ 2

Сначала вам нужно присвоить ему имя:

pathname <- 'C:\\Users\\mhermans\\somefile.csv'

Обратите внимание, что для того, чтобы получить его в векторе имени, вам нужно их удвоить, что дает нам подсказку о том, как вы можете использовать регулярное выражение:

 gsub("\\\\", "/", pathname)
# [1] "C:/Users/mhermans/somefile.csv"

Вам нужно удвоить двойную обратную косую черту. Первая из каждой пары\должна сигнализировать машине grep, что следующий результат является литералом.

Ответ 3

Если файл E:\Data\junk.txt содержит следующий текст (без кавычек): C:\Users\mhermans\somefile.csv

Вы можете получить предупреждение со следующим утверждением, но оно будет работать:

 texinp <- readLines("E:\\Data\\junk.txt")

Если файл E:\Data\junk.txt содержит следующий текст (с кавычками): "C:\Users\mhermans\somefile.csv"

Вышеуказанный оператор readlines также может дать вам предупреждение, но теперь будет содержать:

"\" C:\Users\mhermans\somefile.csv\""

Итак, чтобы получить то, что вы хотите, убедитесь, что во входящем файле нет кавычек и используйте:

 texinp <- suppressWarnings(readLines("E:\\Data\\junk.txt"))