不是高优先级,但这是我经常执行的操作。所以,我想知道是否有办法抑制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
中没有按预期工作。
谢谢!
答案 0 :(得分:3)
来自dput()文档: dput:将R对象的ASCII文本表示写入文件或连接,或使用一个来重新创建对象。。对于函数的输出:&#34; 对于dput,第一个参数是无形的&#34;
输出中的第一行是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()函数,它将内容打印到文件(如果提供名称)或将print语句发送到标准输出。