Поиск…


замечания

Связанные документы:

Печать и отображение строк

R имеет несколько встроенных функций, которые могут использоваться для печати или отображения информации, но print и cat являются самыми основными. Поскольку R - интерпретируемый язык , вы можете попробовать их прямо в консоли R:

print("Hello World")
#[1] "Hello World"
cat("Hello World\n")
#Hello World

Обратите внимание на разницу в обоих входах и выходах для двух функций. (Примечание: в значении x созданных с помощью x <- "Hello World" , нет никаких котировочных символов. Они добавляются print на выходном этапе.)

cat принимает один или несколько векторов символов в качестве аргументов и выводит их на консоль. Если вектор символов имеет длину больше 1, аргументы разделяются пробелом (по умолчанию):

cat(c("hello", "world", "\n"))
#hello world

Без символа новой строки ( \n ) вывод будет следующим:

cat("Hello World")
#Hello World> 

Приглашение для следующей команды появляется сразу после выхода. (Некоторые консоли, такие как RStudio, могут автоматически добавлять новую строку к строкам, которые не заканчиваются новой линией.)

print является примером «общей» функции, что означает, что класс первого переданного аргумента обнаружен, и для вывода используется метод класса. Для символьного вектора, такого как "Hello World" , результат аналогичен выходу cat . Однако символьная строка цитируется, а число [1] выводится, чтобы указать первый элемент символьного вектора (в этом случае - первый и единственный элемент):

print("Hello World")
#[1] "Hello World"

Этот метод печати по умолчанию также является тем, что мы видим, когда просто запрашиваем R для печати переменной. Обратите внимание, как вывод ввода s совпадает с выводом print(s) или print("Hello World") :

s <- "Hello World"
s
#[1] "Hello World"

Или даже не присваивая его чему-либо:

"Hello World"
#[1] "Hello World"

Если мы добавим еще одну символьную строку в качестве второго элемента вектора (используя функцию c() чтобы c онкатировал элементы вместе), то поведение print() выглядит немного иначе, чем поведение cat :

print(c("Hello World", "Here I am."))
#[1] "Hello World" "Here I am."

Обратите внимание, что функция c() не выполняет конкатенацию строк. (Для этой цели нужно использовать paste .) R показывает, что вектор символов имеет два элемента, цитируя их отдельно. Если у нас есть вектор, достаточно длинный, чтобы охватить несколько строк, R будет печатать индекс элемента, начинающегося с каждой строки, точно так же, как он печатает [1] в начале первой строки.

c("Hello World", "Here I am!", "This next string is really long.")
#[1] "Hello World"                      "Here I am!"                      
#[3] "This next string is really long."

Конкретное поведение print зависит от класса объекта, переданного функции.

Если мы вызываем print объекта с другим классом, например «числовой» или «логический», кавычки опускаются с вывода, чтобы указать, что мы имеем дело с объектом, который не является символьным классом:

print(1)
#[1] 1
print(TRUE)
#[1] TRUE

Факторные объекты печатаются так же, как символьные переменные, которые часто создают неоднозначность, когда вывод консоли используется для отображения объектов в телах вопросов SO. Редко использовать cat или print за исключением интерактивного контекста. Явный вызов print() особенно редок (если вы не хотите подавить внешний вид кавычек или просмотреть объект, который возвращается как invisible функцией), поскольку ввод foo на консоли является ярлыком для print(foo) . Интерактивная консоль R известна как REPL, «read-eval-print-loop». Функция cat лучше всего сохраняется для специальных целей (например, запись вывода в открытое подключение к файлу). Иногда он используется внутри функций (когда вызовы print() подавляются), однако использование функции cat() внутри функции для генерации вывода на консоль является плохой практикой . Предпочтительным методом является message() или warning() для промежуточных сообщений; они ведут себя аналогично cat но могут быть необязательно подавлены конечным пользователем. Конечный результат должен быть просто возвращен, чтобы пользователь мог назначить его, если необходимо, сохранить его.

message("hello world")
#hello world
suppressMessages(message("hello world"))

Чтение или запись в файл

Не всегда у нас есть свобода чтения или записи на локальный системный путь. Например, если R-stream streaming map-reduce необходимо читать и записывать в соединение с файлом. Могут быть и другие сценарии, где вы выходите за пределы локальной системы, и с появлением облака и больших данных это становится все более распространенным явлением. Один из способов сделать это - в логической последовательности.

Установите соединение с file() для чтения с помощью команды file() («r» для режима чтения):

conn <- file("/path/example.data", "r") #when file is in local system
conn1 <- file("stdin", "r") #when just standard input/output for files are available

Поскольку это установит только подключение к файлу, можно прочитать данные из этих подключений файлов следующим образом:

line <- readLines(conn, n=1, warn=FALSE)

Здесь мы читаем данные из файла подключение conn построчно , как n=1 . можно изменить значение n (например, 10, 20 и т. д.) для чтения блоков данных для более быстрого считывания (10 или 20 строк, считанных за один раз). Чтобы прочитать полный файл за один раз, установите n=-1 .

После обработки данных или выполнения модели; можно вернуть результаты обратно к подключению к файлу, используя множество разных команд, таких как writeLines(),cat() и т. д., которые способны записывать в соединение с файлом. Однако все эти команды будут использовать соединение с файлом, установленное для записи. Это можно сделать с помощью команды file() :

conn2 <- file("/path/result.data", "w") #when file is in local system
conn3 <- file("stdout", "w") #when just standard input/output for files are available

Затем напишите данные следующим образом:

writeLines("text",conn2, sep = "\n")

Захват вывода команды операционной системы

Функции, возвращающие вектор символов

База R имеет две функции для вызова системной команды. Оба требуют дополнительный параметр для захвата вывода системной команды.

system("top -a -b -n 1", intern = TRUE) 
system2("top", "-a -b -n 1", stdout = TRUE)

Оба возвращают вектор символов.

  [1] "top - 08:52:03 up 70 days, 15:09,  0 users,  load average: 0.00, 0.00, 0.00"     
  [2] "Tasks: 125 total,   1 running, 124 sleeping,   0 stopped,   0 zombie"            
  [3] "Cpu(s):  0.9%us,  0.3%sy,  0.0%ni, 98.7%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st"  
  [4] "Mem:  12194312k total,  3613292k used,  8581020k free,   216940k buffers"        
  [5] "Swap: 12582908k total,  2334156k used, 10248752k free,  1682340k cached"         
  [6] ""                                                                                
  [7] "  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            "
  [8] "11300 root      20   0 1278m 375m 3696 S  0.0  3.2 124:40.92 trala              "
  [9] " 6093 user1     20   0 1817m 269m 1888 S  0.0  2.3  12:17.96 R                  "
 [10] " 4949 user2     20   0 1917m 214m 1888 S  0.0  1.8  11:16.73 R                  "

Для иллюстрации используется команда top -a -b -n 1 команды UNIX. Это спецификация ОС и, возможно, ее необходимо изменить, чтобы запустить примеры на вашем компьютере.

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

devtools::system_output("top", "-a -b -n 1") 

Функции, которые возвращают кадр данных

Функция fread в package data.table позволяет выполнить команду оболочки и прочитать вывод, например read.table . Он возвращает data.table или data.frame .

fread("top -a -b -n 1", check.names = TRUE)
       PID     USER PR NI  VIRT  RES  SHR S X.CPU X.MEM     TIME.         COMMAND
  1: 11300     root 20  0 1278m 375m 3696 S     0   3.2 124:40.92           trala
  2:  6093    user1 20  0 1817m 269m 1888 S     0   2.3  12:18.56               R
  3:  4949    user2 20  0 1917m 214m 1888 S     0   1.8  11:17.33               R
  4:  7922    user3 20  0 3094m 131m 1892 S     0   1.1  21:04.95               R

Обратите внимание, что fread автоматически пропускает верхние 6 строк заголовка.

Здесь был добавлен параметр check.names = TRUE для преобразования %CPU , %MEN и TIME+ в синтаксически допустимые имена столбцов.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow