Почему dput (объект) в j в data.table также печатает (объект)? - PullRequest
0 голосов
/ 07 мая 2018

Не высокий приоритет, но эту операцию я выполняю часто. Итак, я хотел бы знать, есть ли способ подавить вывод выражения внутри dput.

library(data.table)
mtcars <- setDT(copy(mtcars))
mtcars[, dput(unique(gear))]
# c(4, 3, 5) <---- **only** this line was the expected output
# [1] 4 3 5 <---- Why is this line also returned?
dput(unique(mtcars$gear))
# c(4, 3, 5) <---- Expected output

Я знаю, dput(unique(mtcars$gear)) работает, поэтому не уверен, почему он не работает так, как ожидалось в j.

Спасибо!

1 Ответ

0 голосов
/ 07 мая 2018

Из документации dput (): dput: записывает текстовое представление ASCII-объекта R в файл или соединение или использует его для воссоздания объекта. . А для вывода функции: " Для dput, первый аргумент невидим "

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

mtcars[, deparse(unique(mtcars$gear))]
#[1] "c(4, 3, 5)"

Лучшим примером поведения dput () является использование функции print ():

print(dput(unique(mtcars$gear)))
#c(4, 3, 5)   # this line is what dput() prints to the screen
#[1] 4 3 5    # this line comes as a result of print the return value of dput()

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

print(dput(unique(mtcars$gear), file="xxx.txt"))
# [1] 4 3 5

Может быть проще понять, как это работает на следующем примере:

# Define a function that prints a message and returns the object using invisible() function (which suppress the output)
my.f <- function(x) {message(x); invisible(x)}

# This will print the message, but will not print the output of the function
my.f(777)
# 777  

# This will print the message and force printing the return value
print(my.f(777))
# 777
# [1] 777

dput() работает аналогичным образом, за исключением того, что вместо функции message () он либо печатает содержимое в файл (если указано имя), либо отправляет оператор печати на стандартный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...