最近有人通过dput()
与我共享了他们的数据表,并弹出了一个我以前从未遇到过的错误:
错误:意外的“〈”在:“class = c(“data.table”,“data.frame”),.internal.selfref =〈”
经过一番挖掘,我发现这是related specifically to data.tables,正如these answers中所建议的那样,删除internal.selfref = <pointer: 0x7fd60e036ce0>)
成功地分配了数据。
然而,我预期在新手用户之间频繁地共享这些类型的数据;我还没有找到一个合理的/可持续的解决方案来防止这与dput
导出,只有ad-hoc函数和/或删除后,收到运行它。
如果我从dput
中的control = c("keepNA", "keepInteger", "niceNames", "showAttributes")
中删除showAttributes
,那么.internal.selfref
就消失了,但结构的其他所有内容也都消失了。
上述链接问题中提供的问题和答案为5-9岁;我希望可以提供一些改进的功能(我显然不知道),可以告诉dput
忽略这一点,或者如果我可以对dput
之前的数据表本身做一些事情,可以完全删除.internal.selfref
。
有没有办法提供data.table
对象的dput
,而不产生.internal.selfref
?
先谢谢你了。
问题示例:
dattab <- data.table::data.table(a = 1:5, b = 6:10)
dput(dattab)
structure(list(a = 1:5, b = 6:10), row.names = c(NA, -5L),
class = c("data.table", "data.frame"),
.internal.selfref = <pointer: 0x7fd60e036ce0>)
3条答案
按热度按时间i7uaboj41#
将data.table转换为data.frame,然后
dput
它。nxowjjhe2#
有时候我觉得把它分享给合适的类会很有用,所以我使用这个函数:
作为一个例子,
当我想在SO上(或与同事)分享问题中的数据时,我输入
r2dput(MT)
(因为,你知道,我是r2 evans;- ),我只是将(Ctrl-V
)粘贴到评论/问题/答案中,并得到以下内容:这删除了不起作用的
pointer
,它 Package 在as.data.table(.)
中,清楚地表明我真正使用的是什么类,并将其全部保留在一行中(因为我不喜欢格式化代码块中默认的dput
换行符方法)。(The
writeLines(., con="clipboard")
的使用是以windows为中心的;linux/macos需要其他机制,我只是没有调整我的代码,使其与平台无关。)7xzttuei3#
考虑一下{constructive}包,它几乎总是比
dput()
更好,尤其是对于Stack Overflow。它很快就会在CRAN上发布,但现在你需要安装GitHub版本。创建于2023-04-29带有reprex v2.0.2