首页 > 解决方案 > 为什么每次在 r 中的函数内部都使用 print()

问题描述

我有一个具有嵌套函数的函数。我在主函数体内调用了子函数,但问题是诸如head()ggplot不打印到命令行的方法。R中是否有任何选项可以让这些函数打印而不将这些函数嵌套在print()方法中

x <- function(sample_dataframe){
   y <- function(df){
       head(df)
       # do more stuff on the dataframe ..
       return df
   } 
   y(sample_dataframe)
}
x()

标签: r

解决方案


不,没有。功能head()ggplot() 从不打印任何东西。它们只是返回一个对象,然后 R 决定是否打印该对象。

R 中的规则是在顶层返回的对象将被打印(除非它们被标记为“不可见”)。没有选项可以在其他情况下自动打印。

这种差异背后的理念是 R 旨在以交互方式和编程方式使用。在一个程序中,如果你想打印一些东西,你应该调用一个函数来打印它。奇怪的自动动作只会造成麻烦。但是,如果您使用 R 更像是计算器而不是编程平台,这很不方便。如果你想知道 123 乘以 456 的值,打字123*456比打字容易得多print(123*456),所以原来的交互式控制台会自动打印东西,除非你要求它不要这样做。

自该决定以来的几年里,出现了诸如 R Markdown 文档之类的模糊编程平台和交互式计算器之间界限的东西。

您发现指定操作的编程要求很不方便:您希望123*456在程序中打印其结果。这种行为的问题在于,R 中有一些函数因其副作用(删除文件、打开图形设备等)而被调用,其中一些函数返回的信息将在交互调用时打印出来,但如果它们在程序中被调用。不得不使用invisible()来抑制函数结果的打印已经很不方便了;invisible()在没有将结果保存在变量中的每个函数调用上都必须使用它会更加不方便。


推荐阅读