【问题标题】:How to avoid the NULL output of str()如何避免 str() 的 NULL 输出
【发布时间】:2019-06-24 09:54:57
【问题描述】:

我意识到str()NULL 返回给分配的对象(如果已分配)并阅读了一下我注意到这是因为str() 在后台使用了invisible() 函数。 str() 上是否有任何参数禁用它,以便它实际上可以返回对象的结构?

【问题讨论】:

  • 您只想要使用capture.output 获得的文本吗?还是你想要别的?
  • 您的部分问题是错误的。使用invisible 不会阻止返回值。更确切地说,invisible 没有任何参数允许str.default 返回 NULL。许多函数通过将它们传递给 invisible 来返回它们的非 NULL 值。
  • 这似乎是一个 xy 问题。为什么要将str 的输出存储在变量中?在使用 R 的 8 年中,我从来不需要它(我已经在 Stack Overflow 上回答了一些“有趣”的问题)。对于您的实际问题,可能有更好的方法。

标签: r string function


【解决方案1】:

str() 被调用是因为它打印到控制台的副作用,而不是它的返回值。也就是说,如果您想捕获该文本并将其存储在一个对象中而不是将其打印到控制台,您可以使用函数capture.output() 来实现。这是一个例子:

x <- capture.output(str(mtcars))

x[1:4]
#  [1] "'data.frame':\t32 obs. of  11 variables:"                          
#  [2] " $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ..."  
#  [3] " $ cyl : num  6 6 4 6 8 6 8 4 4 6 ..."                            
#  [4] " $ disp: num  160 160 108 258 360 ..."                            

cat(x[1:4], sep="\n")
# 'data.frame':   32 obs. of  11 variables:
#  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
#  $ disp: num  160 160 108 258 360 ...

【讨论】:

    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多