小编PJP*_*PJP的帖子

在不使用外部工具的情况下使用大型数据集时,我可以减少knitR/ggplot2中的pdf文件大小吗?

我有一些大型文件,我在rmarkdown文档中阅读R,清理并使用ggplot2进行绘图.

大多数文件大小约为3Mb,大约有80,000行数据,但有些文件大小为12Mb,有318,406行数据(时间,扩展,强制).

    Time,Extension,Load
    (sec),(mm),(N)
    "0.00000","0.00000","-4.95665"
    "0.00200","0.00000","-4.95677"
    "0.00400","0.00000","-4.95691"
    "0.10400","-0.00040","-4.95423"
Run Code Online (Sandbox Code Playgroud)

这需要一段时间来浏览数据并创建pdf文件(没关系),但PDF文件现在大约有6Mb,其中有大约16个图形(事实上3个图是使用ggplot2的构面图).

据我所知,pdf包含了我的数据集中每个数据点的线段,因此当我增加图形数量时,文件中的数据量会增加.但是,我并不认为需要深入研究pdf文档,以查看详细程度,我将遇到问题,因为它接近10Mb时通过电子邮件发送.

如果我使用pdf2ps将pdf转换为ps,然后使用ps2pdf返回pdf,我得到的文件大约是原始pdf大小的1/3,质量看起来很棒.

因此,在R/knitR/ggplot2中是否有一种方法可以减少pdf图像中绘制的点数,而无需使用外部工具来压缩pdf文件?(或以某种方式优化生成的pdf?)

干杯皮特

r ggplot2 knitr

12
推荐指数
1
解决办法
2023
查看次数

寻找一种比在R中循环更有效的方法来创建数据帧

我正在尝试基于AcceptanceSampling库创建表/数据框,如下所示:

library(AcceptanceSampling)
df<-NULL
for (aql in c(0.01,0.05)){
for (prp in c(0.95)) {
for (def in c(0.06,0.1,0.15)){
for (crp in c(0.05,0.08,0.10)){
df<-as.data.frame(rbind(df,c(aql,prp,def,crp,
                         find.plan(PRP=c(aql,prp),CRP=c(def,crp))$n,
                         find.plan(PRP=c(aql,prp),CRP=c(def,crp))$c
                         )))
}}}}

names(df)<-c("aql","prp","def","crp","n","Ac")
Run Code Online (Sandbox Code Playgroud)

这给了我:

    aql  prp  def  crp    n  Ac
1  0.01 0.95 0.06 0.05  127   3
2  0.01 0.95 0.06 0.08  116   3
3  0.01 0.95 0.06 0.10  110   3
4  0.01 0.95 0.10 0.05   61   2
5  0.01 0.95 0.10 0.08   55   2
6  0.01 0.95 0.10 0.10   52   2
7  0.01 0.95 0.15 0.05 …
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
2
解决办法
99
查看次数

如何防止数据框列被归类为字符而不是数字

早上好.

我骑自行车浏览一些数据,随时建立一个数据帧.每次我在数据框中添加或替换一行时,数值都会被归类为字符,我必须重新对它们进行分类.我假设在将数据添加到数据帧时我做错了什么?

test.df<-data.frame(SIDE=rep("",5),n=rep(NA, 5),c1=rep(NA,5),stringsAsFactors=FALSE)
test.df[1,]<-cbind("A",1,256)
test.df[2,]<-cbind("A",2,258)
test.df[3,]<-cbind("A",3,350)
test.df[4,]<-cbind("A",4,400)
test.df[5,]<-cbind("A",5,360)
summary(test.df)
 SIDE                n                  c1           
  Length:5           Length:5           Length:5          
  Class :character   Class :character   Class :character  
  Mode  :character   Mode  :character   Mode  :character  
Run Code Online (Sandbox Code Playgroud)

将数字列转换为数字:

test.df[, c(2:3)] <- sapply(test.df[, c(2:3)], as.numeric)
summary(test.df)
 SIDE                 n           c1       
 Length:5           Min.   :1   Min.   :256.0  
 Class :character   1st Qu.:2   1st Qu.:258.0  
 Mode  :character   Median :3   Median :350.0  
                    Mean   :3   Mean   :324.8  
                    3rd Qu.:4   3rd Qu.:360.0  
                    Max.   :5   Max.   :400.0  
Run Code Online (Sandbox Code Playgroud)

所以数据帧现在正如我所料 - 1列字符数据和2列数字.但是,如果我再次更改其中一行:

test.df[5,]<-cbind("A",5,360)
summary(test.df)
 SIDE                n                  c1           
 Length:5           Length:5           Length:5          
 Class …
Run Code Online (Sandbox Code Playgroud)

r dataframe

3
推荐指数
1
解决办法
3695
查看次数

有没有更有效的方法使用dplyr过滤器从数据帧中删除行?

我有一个大型数据框,我希望删除一些主题(过程2中主题ID为"4"的所有主题)

示例(和减少)数据集位于:http://pastebin.com/raw/Dz6xxgM3

我的dplyr过滤器线是

library(dplyr)
df<-read.table("http://pastebin.com/raw/Dz6xxgM3")
  filter(df,
    proc == "1" | proc == "3" | proc== "4" | proc =="5"  | (proc=="2" & subject != "4") 
  )
Run Code Online (Sandbox Code Playgroud)

这有效但似乎很狡猾 - 我必须把一个正则表达式包含在所有程序以及proc == 2中.

在过程2中是否有更优雅/有效的方法来删除主题4的行?

干杯皮特

regex r dplyr

1
推荐指数
1
解决办法
3288
查看次数

rmarkdown - 如何注释掉内联代码?

我正在 rmarkdown 中编写一些模板,并且我想使用内联 r 代码:

expanded uncertainty is `r var.sd*2`
Run Code Online (Sandbox Code Playgroud)

然而,由于这些变量(例如 var.sd)在之前的代码块被整理出来之前才可用,如果您尝试在 var.sd 尚未定义时打印报告,您(当然)会收到错误。

我想将代码保留在文档中但已注释掉,以便报告作者在计算 var.sd 时可以取消注释。

我看不出有什么方法可以注释掉代码,从而阻止 R 解释内联代码。我尝试放入 YAML 块(每行带有 #),并用

以下工作均不

---
expanded uncertainty is `r var.sd*2`
---

<!--
expanded uncertainty is `r var.sd*2`
-->
Run Code Online (Sandbox Code Playgroud)

R 内联代码不断被解释,因此抛出错误。

有没有另一种方法可以注释掉 R 并隐藏它?

r knitr r-markdown

1
推荐指数
1
解决办法
1588
查看次数

标签 统计

r ×5

knitr ×2

dataframe ×1

dplyr ×1

ggplot2 ×1

r-markdown ×1

regex ×1