这是一个有趣的问题,因为我找到了一个解决方法,虽然我发现它不是很好。
当我更新pander包(到0.6.1)时,每当我尝试在data.table(包版本1.10)构造的宽格式的data.table上使用pander()时,就会出现错误。使用data.table :: dcast():
的长格式的4-3或更早版本data.table :: setattr(x," row.names",row.names.dt)中的错误: 行名称必须是'字符'或者'整数',而不是' double'
我试图删除任何行名称,但无济于事。经过一些研究,我发现使用reshape2 :: dcast没有错误,但是reshape2 :: dcast转换了data.frame中的data.table,这不是我想要的东西。当然,我可以将data.frame转换回data.table。
以下是一些为我生成错误的示例代码:
library(pander)
library(data.table)
dt.long <- data.table(time=c(1, 1, 2, 2), T=c("c", "t", "c", "t"), count=c(10, 15, 15, 20))
pander(dt.long) # this works fine
dt.wide <- dcast(dt.long, time~T, value.var = "count")
row.names(dt.wide) <- NULL # doesn't help
row.names(dt.wide) <- c() # doesn't help either
pander(dt.wide) # produces error
# work-around
library(reshape2)
dt.wide <- dcast(dt.long, time~T, value.var = "count")
pander(dt.wide) # works fine
class(dt.wide) # but this is a data.frame
dt.wide <- data.table(dt.wide) # now it is a data.table again
有没有一种简单的方法可以将数据保存为data.table并使用之前使用的pander?
我使用R版本3.3.2,以防万一。
提前谢谢!
答案 0 :(得分:1)
这是产生问题的附加属性。设置&#39;已排序&#39; attr
到&#39; NULL&#39;它应该工作
dt.wide <- dcast(dt.long, time~T, value.var = "count")
attr(dt.wide, "sorted") <- NULL
或使用setattr
setattr(dt.wide, 'sorted', NULL)
pander(dt.wide)
#----------------
# time c t
#------ ---- ----
# 1 10 15
# 2 15 20
#----------------
答案 1 :(得分:0)
除了在dt.wide
(pander()
的调用中将dt.wide
强制转换为data.frame的明显变通方法
pander(as.data.frame(dt.wide))
---------------- time c t ------ ---- ---- 1 10 15 2 15 20 ----------------
data.table
的{{1}}方法有一个pander()
参数(参见keys.as.row.names
)。默认情况下,此参数为?pander.data.table
。
因此,另一种解决方法是将此参数设置为TRUE
:
FALSE
pander(dt.wide, keys.as.row.names = FALSE)
但是,我认为----------------
time c t
------ ---- ----
1 10 15
2 15 20
----------------
中存在一个错误,因为pander()
没有键入。它只有dt.wide
属性设置为sorted
:
time
str(dt.wide)
请注意,如果列Classes ‘data.table’ and 'data.frame': 2 obs. of 3 variables:
$ time: num 1 2
$ c : num 10 15
$ t : num 15 20
- attr(*, ".internal.selfref")=<externalptr>
- attr(*, "sorted")= chr "time"
定义为 integer ,time
不会抛出错误,但会忽略结果中的pander(dt.wide)
列。
(见GitHub issue)。