R:将p值四舍五入到xtable中的两个有效数字,并导出到Latex/Office/LibreOffice
我正在使用R:将p值四舍五入到xtable中的两个有效数字,并导出到Latex/Office/LibreOffice,r,export,xtable,significant-digits,reporters,R,Export,Xtable,Significant Digits,Reporters,我正在使用xtable、rtable和ReporteRs的组合,将各种对象的汇总表(aov、glm、lm等)导出到Latex/Word/Powerpoint。然而,我不太喜欢默认的方式,在这种方式中,p值在逗号后有固定数量的数字。相反,我更希望它能以与基本R函数format.pval()和digits=2类似的格式为我提供p值,也就是说,将p值四舍五入到两个有效数字——在本例中为4.2e-17和0.25) 例如 ctl=c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4
xtable
、rtable
和ReporteRs
的组合,将各种对象的汇总表(aov
、glm
、lm
等)导出到Latex/Word/Powerpoint。然而,我不太喜欢默认的方式,在这种方式中,p值在逗号后有固定数量的数字。相反,我更希望它能以与基本R函数format.pval()
和digits=2
类似的格式为我提供p值,也就是说,将p值四舍五入到两个有效数字——在本例中为4.2e-17和0.25)
例如
ctl=c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt=c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
组=gl(2,10,20,标签=c(“Ctl”,“Trt”))
重量=c(控制、试验)
配合=lm(重量~组)
s=汇总(拟合)
s
系数:
估计标准误差t值Pr(>t)
(Intercept)4.8465 0.1557 31.124定义一个助手函数,该函数将查找p值的签名,我将其视为其中包含“Pr”的colname:
xtable2那么xtable(s,digits=c(4,4,4,2,2),display=c('f','f','f','f','f','f','g'))呢(并不是所有的表都有p值列,而且它们有不同的列nrs)。最优雅的方法是什么?(这是我编写table2doc和Table2Pt的两个函数的一部分,用于将R对象导出到word或powerpoint中的表中,因此它充分处理所有可能的xtable输入对象非常重要)您可以编写一些小函数,根据fit对象的列名返回显示类型和数字,这本质上是一个查找表。例如get\u display这很好-这正是我要找的-感谢数百万!!对于lm
示例非常有效,但是对于aov
I getfit=aov(weight~group);s=summary(fit);as.FlexTable(xtable2(s))
rep(4,ncol+1)中的错误:无效的'times'参数
-x['coverties']]]
不起作用-有什么想法如何修复吗?Ha使用asdf=函数(x){if(长度(x)==1){as.data.frame(x[[1]}否则{lappy(unlist(x,FALSE),as.data.frame)};sm=asdf(s)
it-worksHa甚至更好sm=xtable(x)
也可以工作,而且更通用,适用于任何受支持的x类!aov的问题是它返回一个需要单独处理的对象列表,您可以将其排序。lm
和glm
返回一个带有系数的列表。
ctl = c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt = c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group = gl(2, 10, 20, labels = c("Ctl","Trt"))
weight = c(ctl, trt)
fit = lm(weight ~ group)
s=summary(fit)
s
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.8465 0.1557 31.124 <2e-16 ***
group1 0.1855 0.1557 1.191 0.249
library(xtable)
library(rtable)
library(ReporteRs)
tab=as.FlexTable(xtable(s))
tab
xtable2 <- function(x, ...) { sm <- x[['coefficients']]; ncol <- ncol(sm)
whch<- grep("Pr", colnames(sm))
digs <- rep(4, ncol+1); digs[whch+1] <- 2
disp <-rep("f", ncol+1); disp[whch+1] <- "g"
xtable(x, digits= digs, display=disp, ...) }
> tab <- as.FlexTable(xtable2(s)); tab