Вы можете использовать следующие для достижения желаемой функциональности
"% d:% d: d"% (часы, минуты, секунды)
Мы много говорили об этом в комментариях к моему предыдущему сообщению, но я не хочу, чтобы это затерялось на странице 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», но процесс тот же, вы просто замените локаль на «китайский» (именование немного противоречиво, обратитесь к документации).
В окнах, когда вы копируете в строку кодировки unicode или utf-8 в текстовый элемент управления, который настроен на однобайтовый ввод (ascii ... в зависимости от локали), неизвестные байты будут заменены на вопросительные знаки. Если я беру первые 4 символа вашей строки и скопирую их в, например, Блокнот, а затем сохраните его, файл будет в шестнадцатеричном формате:
52 3F 3F 3F 3F
blockquote>, что вам нужно сделать, это найти редактор, который вы можете установите для utf-8 перед копированием в него текста, тогда сохраненный файл (из ваших первых 4-х символов) станет:
52 E5 90 8C E6 97 B6 E4 B9 9F E8 A2 AB
blockquote>Это будет признано действительным utf-8 [R].
Я использовал «Notepad2» для этого, но я уверен, что есть еще много .
Для меня (в окнах) я:
source.utf8 <- function(f) {
l <- readLines(f, encoding="UTF-8")
eval(parse(text=l),envir=.GlobalEnv)
}
Он отлично работает.
Я думаю, что проблема связана с 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 кажется здесь неактуальным. Это всего лишь файл, вы говорите ему, что кодирует файл, почему ваш язык имеет значение?
На основе ответа ворона это решение заставляет работать кнопку 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)
}
В 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 и т. д.
source()
требует установки Sys.setlocale()
по всему файлу. eval
выполняет работу без этого требования.
– Anton Tarasenko
15 December 2013 в 09:05
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"). Пожалуйста, замените значение локали соответственно.
iconv
в качестве виновника здесь, но я боюсь, что если проф. Рипли примет такое отношение, то у R на Windows мало надежды на поддержку Юникода должным образом. – David Heffernan 21 February 2011 в 20:28