sqlQuery в R сбой при вызове через source () [duplicate]

Вы можете использовать следующие для достижения желаемой функциональности

  "% d:% d: d"% (часы, минуты, секунды)  
36
задан Bernd Elkemann 27 February 2013 в 22:07
поделиться

7 ответов

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

[/g0]

Файл «myfile.r» содержит:

russian <- function() print ("Американские с...");

Консоль содержит:

source("myfile.r", encoding="utf-8")
> Error in source(".....
Sys.setlocale("LC_CTYPE","ru")
> [1] "Russian_Russia.1251"
russian()
[1] "Американские с..."

Обратите внимание, что файл не работает и указывает на тот же символ, что и ошибка оригинального плаката (после «R»). сделайте это с китайцами, потому что мне нужно будет установить «Microsoft Pinyin IME 3.0», но процесс тот же, вы просто замените локаль на «китайский» (именование немного противоречиво, обратитесь к документации).

21
ответ дан Gregor 16 August 2018 в 03:04
поделиться
  • 1
    Большое спасибо, это сработало! Я использовал Sys.setlocale («LC_CTYPE», «китайский») – Tony Breyal 21 February 2011 в 15:46
  • 2
    В любое время сэр. («китайский» не «китайский», интересно, насколько непоследовательны они хороши, что вы обнаружили) – Bernd Elkemann 21 February 2011 в 16:00
  • 3
  • 4
    Вы просто переключаете локаль несколько раз внутри этого файла. Я не уверен, что проблема с R, некоторые комментаторы сказали, что это нормально в Linux (без переключения локалей). Это может быть R, но это может быть Windows-API (widechar вместо utf-8) или их комбинация. – Bernd Elkemann 21 February 2011 в 19:49
  • 5
    @Tony Профессор Рипли говорит из своей шляпы! Windows поддерживает UTF-8 просто отлично. Windows поддерживает Unicode с 1991 года, и причина, по которой он использует UTF-16, а не UTF-8, как и Linux, заключается в том, что он поддерживал Unicode до того, как UTF-8 был даже придуман! Приложение для Windows ест всех этих персонажей на завтрак. Если вы указываете кодировку, локали должны быть неактуальными. Я перебираю iconv в качестве виновника здесь, но я боюсь, что если проф. Рипли примет такое отношение, то у R на Windows мало надежды на поддержку Юникода должным образом. – David Heffernan 21 February 2011 в 20:28

В окнах, когда вы копируете в строку кодировки unicode или utf-8 в текстовый элемент управления, который настроен на однобайтовый ввод (ascii ... в зависимости от локали), неизвестные байты будут заменены на вопросительные знаки. Если я беру первые 4 символа вашей строки и скопирую их в, например, Блокнот, а затем сохраните его, файл будет в шестнадцатеричном формате:

52 3F 3F 3F 3F

, что вам нужно сделать, это найти редактор, который вы можете установите для utf-8 перед копированием в него текста, тогда сохраненный файл (из ваших первых 4-х символов) станет:

52 E5 90 8C E6 97 B6 E4 B9 9F E8 A2 AB

Это будет признано действительным utf-8 [R].

Я использовал «Notepad2» для этого, но я уверен, что есть еще много .

1
ответ дан Bernd Elkemann 16 August 2018 в 03:04
поделиться
  • 1
    Я просто попробовал WinEdt (для которого часто используется R-Plugin RWinEdt), и он не работает (версия 5.5). Таким образом, вы можете попробовать его с помощью «Notepad2». первый. Вы также можете написать текстовый файл utf-8 самостоятельно, используя [R] writeChar (), я думаю, что он использует кодировку, установленную в Sys.setlocale (). – Bernd Elkemann 20 February 2011 в 23:20
  • 2
    Неважно, какой текстовый редактор пишет файл, все они могут правильно записать файл, R в Windows просто не читает его. – David Heffernan 20 February 2011 в 23:43
  • 3
    @David Heffernan Проблема с оригинальным плакатом отличается от вашего. Да, R может читать файлы UTF-8, но способ, которым настроен его редактор, даже не создает файл UTF-8. Он использует редактор, который не установлен в Utf-8-Mode, и, таким образом, если он копирует «R 同时 也», в него файл становится байтами [52 3F 3F 3F] «R ???». – Bernd Elkemann 21 February 2011 в 10:30
  • 4
    @eznme Я так не думаю. OP указывает, что файл сохраняется с кодировкой UTF-8. Я сохраняю тот же файл с кодировкой UTF-8 (или, действительно, UTF-16) и получаю ту же ошибку. Проблема в том, что Р. – David Heffernan 21 February 2011 в 10:35
  • 5
    @eznme Я не вижу, чтобы вы вызывали источник в файле UTF-8 с этим текстом на этом снимке экрана. Это то, что не работает. Использование локалей, которые вы иллюстрируете, предназначено для работы с 8-битными наборами символов. Современная программа Unicode использует текст Unicode, поэтому локали используются только для таких параметров, как настройки форматирования даты / времени / числа. – David Heffernan 21 February 2011 в 14:15

Для меня (в окнах) я:

source.utf8 <- function(f) {
    l <- readLines(f, encoding="UTF-8")
    eval(parse(text=l),envir=.GlobalEnv)
}

Он отлично работает.

5
ответ дан crow16384 16 August 2018 в 03:04
поделиться

Я думаю, что проблема связана с R. Я могу с радостью загрузить файлы UTF-8 или файлы UCS-2LE со многими не-ASCII-символами. Но некоторые символы приводят к сбою. Например, следующие

danish <- function() print("Skønt H. C. Andersens barndomsomgivelser var meget fattige, blev de i hans rige fantasi solbeskinnede.")
croatian <- function() print("Dodigović. Kako se Vi zovete?")
new_testament <- function() print("Ne provizu al vi trezorojn sur la tero, kie tineo kaj rusto konsumas, kaj jie ŝtelistoj trafosas kaj ŝtelas; sed provizu al vi trezoron en la ĉielo")
russian <- function() print ("Американские суда находятся в международных водах. Япония выразила серьезное беспокойство советскими действиями.")

хороши как в UTF-8, так и в UCS-2LE без русской линии. Но если это включено, то это терпит неудачу. Я указываю пальцем на R. Ваш китайский текст также кажется слишком сложным для R в Windows.

Locale кажется здесь неактуальным. Это всего лишь файл, вы говорите ему, что кодирует файл, почему ваш язык имеет значение?

4
ответ дан David Heffernan 16 August 2018 в 03:04
поделиться
  • 1
    Я собираюсь опубликовать свой вопрос в официальном списке R-help, на всякий случай это ошибка R в Windows. – Tony Breyal 21 February 2011 в 14:03

На основе ответа ворона это решение заставляет работать кнопку RStudio Source.

При нажатии этой кнопки Source выполняется RStudio source('myfile.r', encoding = 'UTF-8') ]), поэтому переопределение source заставляет ошибки исчезать и запускает код, как ожидалось:

source <- function(f, encoding = 'UTF-8') {
    l <- readLines(f, encoding=encoding)
    eval(parse(text=l),envir=.GlobalEnv)
}
0
ответ дан Domi 16 August 2018 в 03:04
поделиться

В R / Windows в source возникают проблемы с любыми символами UTF-8, которые не могут быть представлены в текущей локали (или кодовой странице ANSI в Windows-talk). И, к сожалению, Windows не имеет UTF-8, доступного в виде кодовой страницы ANSI. У Windows есть техническое ограничение, что кодовые страницы ANSI могут быть только кодировками с одним или двумя байтами на каждый символ, а не с кодировками с байтами, такими как UTF- 8.

Это не является фундаментальной неразрешимой проблемой - есть что-то не так с функцией source. Вы можете получить 90% пути, выполнив это:

eval(parse(filename, encoding="UTF-8"))

Это будет работать почти так же, как source() с аргументами по умолчанию, но не позволит вам делать echo = T, eval .print = T и т. д.

22
ответ дан Joe Cheng 16 August 2018 в 03:04
поделиться
  • 1
    Я подтверждаю, что это работает. source() требует установки Sys.setlocale() по всему файлу. eval выполняет работу без этого требования. – Anton Tarasenko 15 December 2013 в 09:05
  • 2
    source перенаправляет аргумент encoding в file, который, в свою очередь, преобразует текстовый ввод в память в любую кодировку локали (и не работает) - это, по-видимому, является виновником. parse в отличие от этого не делает этого, он читает файл как есть и просто отмечает байты в памяти с правильной кодировкой. - Я не совсем уверен, что это говорит нам, за исключением того, что внутренняя обработка кодировок R грязная (мы уже это знали), и она должна быть исправлена, обратная совместимость будет проклята. – Konrad Rudolph 26 June 2014 в 18:53

Я сталкиваюсь с этой проблемой при попытке создать файл .R, содержащий некоторые китайские символы. В моем случае я обнаружил, что просто установить «LC_CTYPE» на «китайский» недостаточно. Но настройка «LC_ALL» на «китайский» работает хорошо.

Обратите внимание, что недостаточно получить правильную кодировку при чтении или записи текстового файла в Rstudio (или R?) с не-ASCII. Также выполняется установка языкового стандарта.

PS. команда Sys.setlocale (category = "LC_CTYPE", locale = "chinese"). Пожалуйста, замените значение локали соответственно.

0
ответ дан user2473519 16 August 2018 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: