2017-08-04 54 views
3

我想您的帮助搞清楚为什么dump功能截断长输出,可以做些什么来避免这种行为。通过“截断”,我的意思是该函数显示...而不是打印对象的完整表示。dump()函数产生的输出被截断

这是一个大问题,因为它呈现像svSocket无法使用一些软件包。该软件包依靠完全源代码转储作为在R会话之间发送对象的一种手段。

我在linux平台(x86_64-pc-linux-gnu)上看到此问题,但未在mac(x86_64-apple-darwin15.6.0)上看到此问题,两者均使用最新版本的R(3.4.1)

下面是可再现的例子:

x <- as.list(1:200) 
dump("x", stdout()) 

的输出是:

list(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
    14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 
    26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 
    38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 
    50L, 51L, 52L, 53L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 
    62L, 63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 73L, 
    74L, 75L, 76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 
    86L, 87L, 88L, 89L, 90L, 91L, 92L, 93L, 94L, 95L, 96L, 97L, 
    98L, 99L, 100L, 101L, 102L, 103L, 104L, 105L, 106L, 107L, 
    108L, 109L, 110L, 111L, 112L, 113L, 114L, 115L, 116L, 117L, 
    ... 
+0

P.S.我知道一个类似的未答复的问题在https://stackoverflow.com/questions/40820774/dump-in-r-not-sourceable-output-contains,但决定我会写我自己的,所以我可以提供更多的细节(可重复的例子,环境)以及它是一个严重问题的原因。希望这个问题的版本会获得更多的知名度。我很感谢你考虑不作为副本关闭。 – flodel

+1

有趣。我**不**在x86_64-pc-linux-gnu,R版本3.4.1上看到这种行为。 –

+0

你是否看到'dput(x)'同样的问题? – SymbolixAU

回答

2

最有可能的,这是因为选项(deparse.max.lines)已被设置;从R版本3.3.2开始,dump()将该选项设置为“自动解析活动”,因为该选项设置是可行的。

至于svSocket,它确实不应该使用dump来传递数据;一般来说,serialize/unserialize是这方面的首选方法。

+0

你说得对。我对我关于平台的信息有误导性表示歉意;我没有注意到我测试的两个平台有不同的启动环境。正如你完全猜到的那样,我的linux Rprofile有一些类似'options(deparse.max.lines = 10)'的东西。谢谢 ;-) – flodel