使用sink重定向输出时dput写入位置及控制台输出异常咨询
关于R中sink与dput的输出问题解答
问题1:使用sink重定向输出时,dput的内容会写入到哪里?
默认情况下,当你用sink("your_file.txt")开启输出重定向后,dput()的内容会被写入到你指定的目标文件里。原因很直接:dput()的默认输出目标是R的标准输出流(stdout()),而sink()默认就是捕获这个标准输出流,把原本要输出到控制台的内容转存到文件中。除非你手动给dput()指定file参数(比如dput(x, file = "another_file.txt")或者定向到其他连接),否则它会完全跟着sink()的重定向规则走。
问题2:为何x能在控制台打印,但dput(x)不行?
这个现象和你使用的RStudio环境直接相关!当你直接输入x并回车时,RStudio其实悄悄做了额外处理:它会单独捕获对象的预览输出并显示在控制台,哪怕sink()已经把标准输出流重定向到了文件。而dput()是严格遵循标准输出流规则的——既然sink()已经把这个流指向了文件,那它的内容自然只会出现在文件里,不会在控制台显示。
如果你想同时在控制台看到dput()的结果,有两个简单的解决办法:
- 方法一:让
dput()输出到标准错误流(stderr()),这个流默认不会被sink()重定向,代码示例:dput(x, file = stderr()) - 方法二:开启
sink()的split参数,这样输出会同时写入文件和控制台:sink("your_output.txt", split = TRUE) # 之后不管是输入x还是dput(x),都会同时在控制台和文件里出现
内容的提问来源于stack exchange,提问作者C. Braun
相关产品推荐
相关产品推荐

