gpt4 book ai didi

r - `print(x)`没有提供与`x`相同的输出

转载 作者:行者123 更新时间:2023-12-04 13:47:18 26 4
gpt4 key购买 nike

在R控制台上,我希望print(x)始终提供与x相同的输出。我一直认为控制台使用print来实际打印所有内容。但是print还有一个额外的NULL:

library(data.table)

print(data.table(1)[0])
# Empty data.table (0 rows) of 1 col: V1
# NULL # why is this 'NULL' printed here?

data.table(1)[0]
# Empty data.table (0 rows) of 1 col: V1
# .. but no 'NULL' here?

这个示例数据是由 data.table包创建的,但是我认为即使不使用 data.table,一般问题仍然适用:在控制台上使用什么函数/方法来打印返回值?
# R --vanilla  # R version 3.2.3

最佳答案

更新 :

该修复程序已在v1.10.5中合并。感谢Michael Chirico。

运行后:

install.packages('data.table', type = 'source',
repos = 'http://Rdatatable.github.io/data.table')

它将按预期工作:
library(data.table)
# data.table 1.10.5 IN DEVELOPMENT built 2017-05-18 00:04:56 UTC; travis
# The fastest way to learn (by data.table authors): https://www.datacamp.com/courses/data-analysis-the-data-table-way
# Documentation: ?data.table, example(data.table) and browseVignettes("data.table")
# Release notes, videos and slides: http://r-datatable.com

print(data.table(1)[0])
# Empty data.table (0 rows) of 1 col: V1

data.table(1)[0]
# Empty data.table (0 rows) of 1 col: V1

可能是因为 printdata.table方法做错了。预期打印方法会无形地返回。但是我怀疑 data.table:::print.data.table明显返回了。

(更新:我刚刚提交了 a bug report to data.table。如果我分析不正确,请向他们道歉!)

?print:

‘print’ prints its argument and returns it invisibly (via ‘invisible(x)’).



这是一个可能发生的小演示:
> x=list()
> class(x) <- 'X'
> print.X <- function(x) { print("I am printing"); return(1729); }
> x
[1] "I am printing"
> print(x)
[1] "I am printing"
[1] 1729

请注意,仅键入 x如何仅打印文本,但不打印数字。但是键入 print(x)也会导致打印该数字。

然后,如果我安排此打印方法以不可见的方式返回,如下所示:
> print.X <- function(x) { print("I am printing"); return(invisible(1729)); }

..然后 print(x)给出了预期的输出
> print(x)
[1] "I am printing"

因此,当您在控制台上键入 x时,控制台会代表您调用 print并忽略 print的返回值(这可能是可见的)。但是,如果您键入 print(x),则 print的返回值(如果可见)将被打印。

我认为 ?print文档有点误导。 print方法应该返回其参数,并且应该这样做是不可见的,但是这些规则未强制执行

关于r - `print(x)`没有提供与`x`相同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39642991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com