我想补充LaTeX排版到地块元件R(例如:标题,轴标签,注释等)的使用任一组合base/lattice或与ggplot2.
问题:
LaTeX使用这些包进入图表,如果是这样,它是如何完成的? 例如,通过这里讨论的包进行Python matplotlib编译:http://www.scipy.org/Cookbook/Matplotlib/UsingTexLaTeXtext.usetex
是否有类似的过程可以生成这样的图R?
我经常想要将每个索引具有相同元素类型的列表转换为数据帧.例如,我可能有一个列表:
> my.list
[[1]]
[[1]]$global_stdev_ppb
[1] 24267673
[[1]]$range
[1] 0.03114799
[[1]]$tok
[1] "hello"
[[1]]$global_freq_ppb
[1] 211592.6
[[2]]
[[2]]$global_stdev_ppb
[1] 11561448
[[2]]$range
[1] 0.08870838
[[2]]$tok
[1] "world"
[[2]]$global_freq_ppb
[1] 1002043
Run Code Online (Sandbox Code Playgroud)
我想将此列表转换为数据框,其中每个索引元素都是一列.自然(对我来说)要做的就是使用do.call:
> my.matrix<-do.call("rbind", my.list)
> my.matrix
global_stdev_ppb range tok global_freq_ppb
[1,] 24267673 0.03114799 "hello" 211592.6
[2,] 11561448 0.08870838 "world" 1002043
Run Code Online (Sandbox Code Playgroud)
很简单,但是当我尝试将此矩阵转换为数据框时,列仍然是列表元素,而不是向量:
> my.df<-as.data.frame(my.matrix, stringsAsFactors=FALSE)
> my.df[,1]
[[1]]
[1] 24267673
[[2]]
[1] 11561448
Run Code Online (Sandbox Code Playgroud)
目前,为了正确地投射数据帧,我使用unlist和迭代每个列as.vector,然后重建数据帧:
new.list<-lapply(1:ncol(my.matrix), function(x) as.vector(unlist(my.matrix[,x])))
my.df<-as.data.frame(do.call(cbind, new.list), stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)
然而,这似乎效率很低.有没有更好的方法来做到这一点?
是否可以从R中解析PDF文件中的文本数据?有没有出现是一个相关包这样的提取,但有没有人尝试或见于读该怎么办?
在Python中有PDFMiner,但我想在可能的情况下将此分析保留在R中.
有什么建议?
我有几个数据集,75,000个观测值和一个type可以取值0-4 的变量.我想为所有类型的每个数据集添加五个新的虚拟变量.我能想出的最佳方法如下:
# For the 'binom' data set create dummy variables for all types in all data sets
binom.dummy.list<-list()
for(i in 0:4){
binom.dummy.list[[i+1]]<-sapply(binom$type,function(t) ifelse(t==i,1,0))
}
# Add and merge data
binom.dummy.df<-as.data.frame(do.call("cbind",binom.dummy.list))
binom.dummy.df<-transform(binom.dummy.df,id=1:nrow(binom))
binom<-merge(binom,binom.dummy.df,by="id")
Run Code Online (Sandbox Code Playgroud)
虽然这很有效,但速度非常慢(合并功能甚至已经崩溃了几次).有没有更有效的方法来做到这一点?也许这个功能是我不熟悉的软件包的一部分?
我正在使用ggplot2来探索基于代理的模型的一些测试结果.该模型可以在每次实现的三轮中结束,因此我感兴趣的是玩家实用程序在游戏结束的方式和它们在2D空间中的相对位置方面的差异.
所有这一切都是说我已经生成了一个facet_wrap图来显示每一轮的这个,但我还想用cor(x,y)为每个方面中表示的数据子集注释每个图.有没有办法告诉ggplot2我希望注释使用facet_wrap生成的数据子集?这是我到目前为止的代码,以及它产生的代码
library(ggplot2)
# Load data
abm.data<-read.csv("ABM_results.csv")
# Create new colun for area of Pareto set
attach(abm.data)
area<-abs(((x3*(y2-y1))+(x2*(y1-y3))+(x1*(y3-y2)))/2)
abm.data<-transform(abm.data,area=area)
detach(abm.data)
# Compare area of Pareto set with player utility
png("area_p1.png",res=100,pointsize=20,height=500,width=1600)
area.p1<-ggplot(abm.data,aes(x=area))+geom_point(aes(y=U1_2,colour="Player 1",alpha=0.4))+facet_wrap(~round,ncol=3)+
annotate("text",0.375,-1.25,label=paste("rho=",round(cor(abm.data$area,abm.data$U1_2),2)), parse=TRUE)+
scale_colour_manual(values=c("Player 1"="red"))
area.p1+xlab("Area of Pareto Set")+ylab("Player Utility at Game End")+
opts(title="Final Player 1 Utility by Pareto Set Size and Round Game Ends",legend.position="none")
dev.off()
Run Code Online (Sandbox Code Playgroud)
area_p1 http://www.drewconway.com/zia/wp-content/uploads/2010/01/area_p1.png
如您所见,有两个问题:
我正在编写一个函数,需要在ping基于Web的API时捕获速率限制错误.
我tryCatch用来捕获错误,并在此函数内我指定以下错误函数:
error=function(e) {
warning(paste(e,"\nWaiting an hour for rate limit to reset..."))
Sys.sleep(3600) # Wait an hour for rate-limit to reset
return(user.info(user, ego.count))
}
Run Code Online (Sandbox Code Playgroud)
该函数似乎有效,但在检查脚本的输出日志时,我注意到在睡眠时间用完之后才会写入警告消息.
我可以在R控制台上重现此行为:
print("Drew sucks")
Sys.sleep(10)
Run Code Online (Sandbox Code Playgroud)
之前十秒钟Drew sucks打印到控制台.在我的功能中,我想在暂停发生之前向用户提供关于这个长暂停的一些反馈.
是什么导致了这种行为?
我试图找到多个向量之间不常见的元素.也就是说,我想确切地知道所有向量之间不共享的元素(不仅仅是它们的位置等).
我能想出的最好的实现使用嵌套循环,我意识到这可能是效率最低的,最值得注意的是因为我写这个时执行仍在运行.这就是我想出的.(每个*.id是最高法院案件ID的矢量,存储为字符串).
check.cases<-TRUE
if(check.cases) {
all.cases<-c(AMKennedy.id,AScalia.id,CThomas.id,DHSouter.id,JGRoberts.id,JPStevens.id,RBGinsburg.id,SAAlito.id,SGBreyer.id)
bad.cases<-c()
for(b in all.cases) {
for(t in all.cases) {
m<-match(t,b)
bad<-t[which(is.na(m))]
bad.cases<-append(bad.cases,bad)
}
}
bad.cases<-unique(bad.cases)
}
print(bad.cases)
Run Code Online (Sandbox Code Playgroud)
必须有一种更有效的方法吗?
我试图使用stat_bin函数中的几个月观察数年的时间序列数据ggplot2.代码如下所示:
month.breaks<-seq.Date(from=min(afg$DateOccurred),to=max(afg$DateOccurred),by="month") # All months, for breaks
report.region<-ggplot(afg,aes(x=DateOccurred))+stat_bin(aes(y=..density..,fill=Type),breaks=month.breaks)+facet_wrap(~Region)
print(report.region)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行print时,我收到以下错误:
Error in `+.Date`(left, right) : binary + is not defined for Date objects
Run Code Online (Sandbox Code Playgroud)
如果我正确读取这个,则没有为Date对象定义加号运算符,因此无法执行这种类型的分箱操作?
最近,我需要将一系列日期从表单"July 25, 2010"转换为标准R格式"2010-07-25":
> head(old.data$dateoccurred)`
[1] "April 9, 2004" "September 1, 2004" "February 7, 2005
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我想制作一个12个案例的switch语句,它返回一个月的数字表示; 但是,R不支持本机切换(至少,我找不到一个).
因此,创建交换机最像R的方式是什么?