小编Chr*_*ris的帖子

Can Sweave会自动生成许多pdf吗?

我分析来自许多城市的测量数据(数百个),并且需要为每个城市创建单独的报告(采用Adobe pdf格式).

我的过程是这样的:

  1. 第一个RStudio准备要显示的数据,保存在X.Rda中.
  2. 在X.Rnw(RStudio)中,我读了X.Rda,选择一个城市,并生成表格和图表.
  3. 在RStudio我按"编译PDF",生成城市报告X.pdf.
  4. 我转到第2步,选择另一个城市,依此类推.

这非常繁琐,看起来非常适合每个城市的循环,但它怎么能完成呢?

谢谢r-contributors!

/克里斯

r sweave knitr

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

怎么读大json?

我收到了带有要在R中分析的数据的json文件,为此我使用了RJSONIO包:

library(RJSONIO)
filename <- "Indata.json"
jFile <- fromJSON(filename)
Run Code Online (Sandbox Code Playgroud)

当json文件大于约300MB(未压缩)时,我的计算机开始使用交换内存并继续解析(fromJSON)数小时.一个200MB的文件只需要一分钟就可以解析.

我在Ubuntu 64bit和16GB RAM上使用R 2.14(64位),所以我很惊讶需要交换大约300MB的json.

我怎么能读大jsons?内存设置中有什么东西搞砸了吗?我重新启动了R并且只运行了上面的三行.json文件包含2-3列短字符串,10-20列包含0到1000000之间的数字.也就是说,它是大小的行数(在解析数据中超过一百万行).


更新:从评论中我了解到rjson在C中完成的更多,所以我试了一下.带有RJSONIO(根据Ubuntu系统监视器)的300MB文件达到了100%的内存使用率(从6%基线开始)并继续进行交换,只需要60%的内存和rjson包,并且在合理的时间(分钟)内完成解析.

c c++ json r

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

Rbind有新列和data.table

我需要在现有表中添加许多大表,所以我使用rbind和优秀的包data.table.但是后面的一些表有比原始列更多的列(需要包含它们).是否有相当于data.table的rbind.fill?

library(data.table)

aa <- c(1,2,3)
bb <- c(2,3,4)
cc <- c(3,4,5)

dt.1 <- data.table(cbind(aa, bb))
dt.2 <- data.table(cbind(aa, bb, cc))

dt.11 <- rbind(dt.1, dt.1)  # Works, but not what I need
dt.12 <- rbind(dt.1, dt.2)  # What I need, doesn't work
dt.12 <- rbind.fill(dt.1, dt.2)  # What I need, doesn't work either
Run Code Online (Sandbox Code Playgroud)

我需要在拥有所有表之前开始rbinding,因此无法知道将来会调用哪些新列.缺少的数据可以用NA填充.

r data.table

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

按开始和结束值的ID行块

我需要通过start-row和end-row标准来识别data.table中的行块.在下面的MWE中,起始行由colA =="d"定义,并且该组继续直到colA =="a"

library(data.table)
in.data <- data.table(colA=c("b", "f", "b", "k", "d", "b", "a", "s", "a", "n", "d", "f", "d", "a", "t"))
in.data$wanted.column <- c(NA, NA, NA, NA, 1, 1, 1, NA, NA, NA, 2, 2, 2, 2, NA)

in.data
#     colA wanted.column
#  1:    b            NA
#  2:    f            NA
#  3:    b            NA
#  4:    k            NA
#  5:    d             1
#  6:    b             1
#  7:    a             1
#  8:    s            NA
#  9:    a            NA
# 10: …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

带有reveal.js的R htmlwidgets

如何在reveal.js和Rmarkdown中使用优秀的htmlwidgets(例如http://rstudio.github.io/leaflet/)?

这个mwe(不是rev​​eal.js)有效:

---
title: "Maptest 1"
output: html_document
---

##  Map

```{r, echo=FALSE}
library(leaflet)
m <- leaflet()
m <- addTiles(m)
m <- addMarkers(m, lng=174.768, lat=-36.852, popup="The birthplace of R")
m
```
Run Code Online (Sandbox Code Playgroud)

但是这个没有:

---
title: "Maptest 2"
output: revealjs::revealjs_presentation
---

##  Map

```{r, echo=FALSE}
library(leaflet)
m <- leaflet()
m <- addTiles(m)
m <- addMarkers(m, lng=174.768, lat=-36.852, popup="The birthplace of R")
m
```
Run Code Online (Sandbox Code Playgroud)

我重新使用了htmlwidgets-webpage中的示例,reveal.js-template来自https://github.com/jjallaire/revealjs

r knitr r-markdown reveal.js

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

索引data.table中的唯一值

不确定如何用单词表达问题,但是如何为data.table创建一个索引列,当出现不同的值时,每个组会增加?

这是MWE

library(data.table)
in.data <- data.table(fruits=c(rep("banana", 4), rep("pear", 5)),vendor=c("a", "b", "b", "c", "d", "d", "e", "f", "f"))
Run Code Online (Sandbox Code Playgroud)

这是R代码应该生成的结果

in.data[, wanted.column:=c(1,2,2,3,1,1,2,3,3)]

#    fruits vendor wanted.column
# 1: banana      a             1
# 2: banana      b             2
# 3: banana      b             2
# 4: banana      c             3
# 5:   pear      d             1
# 6:   pear      d             1
# 7:   pear      e             2
# 8:   pear      f             3
# 9:   pear      f             3
Run Code Online (Sandbox Code Playgroud)

因此它在每个水果中标记每个供应商1,2,3,.... 可能有一个非常简单的解决方案,但我被卡住了.

r data.table

8
推荐指数
2
解决办法
621
查看次数

如何对数据进行去除和重新分类?

我使用的一些数据包含敏感信息(人员姓名,日期,地点等).但我有时需要与其他人分享"数字"以获得统计分析的帮助,或者在更强大的机器上处理它,在那里我无法控制谁看数据.

理想情况下,我想这样工作:

  1. 将数据读入R(查看,清理等)
  2. 选择我要取消分类的数据框,通过包运行它并接收两个"文件":去分类数据和翻译文件.后者我会保持自己.
  3. 可以无需担心地分享,操纵和处理去分类数据.
  4. 我将处理后的数据与翻译文件重新分类.

我认为这在上传数据以便"在云端"(亚马逊等)进行处理时也很有用.

你有过这种情况吗?我首先想到自己编写一个"随机化"功能,但后来我意识到这可以做到多么复杂(例如,在不丢失顺序的情况下抵消时间戳).也许已经有一个定义的方法或工具?

感谢所有在Stack Overflow为[r] -tag做出贡献的人!

r

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

Windows中的并行for循环

我对很远的行业级数据库进行了很多SQL查询,但接收结果需要很长时间.当我带R的计算机几乎紧挨着数据库时,速度要快得多,这让我相信它是我的计算机和数据库之间的延迟,这是瓶颈,并且运行并行查询可能会加快速度.我们在不同的大陆.

这是一个不平行的工作版本:

doQueries <- function(filenameX, inp1, inp2) {
  print(paste("Starting:", inp1, inp2, ",saving to", filenameX, sep=" "))
  # Here should the query be (using RODBC)
  # save(queryresults, file="filenameX")
}

input.rows <- cbind(c("file1.rda","file2.rda","file3.rda"),c("A","B","C"),c(12,13,14))

for (i in 1:nrow(input.rows)) {
  doQueries(filenameX=input.rows[i,1], inp1=input.rows[i,2], inp2=input.rows[i,3])
}
Run Code Online (Sandbox Code Playgroud)

我已尝试使用以下代码,但foreach-library似乎并不可用,正如我从阅读CRAN时所理解的那样,并行正在替换早期的并行软件包("package'foreach'不可用(对于R版本2.15). 0)").

library(parallel)
library(foreach)
foreach (i=1:nrow(input.rows)) %dopar% {
  doQueries(filenameX=input.rows[i,1], inp1=input.rows[i,2], inp2=input.rows[i,3])
}
Run Code Online (Sandbox Code Playgroud)

我应该怎么做呢?

感谢Stackoverflow上的所有贡献者!

/克里斯

更新:感谢nograpes,我设法加载库.以下代码似乎有效:

library(RODBC)
library(doParallel)
library(foreach)

# odbcCloseAll()
# my_conn <- odbcConnect("database", uid="xx", pwd="yy", case="nochange")

doQueries <- function(filenameX, inp1, inp2) {
  print(paste("Starting:", inp1, inp2, ",saving to", filenameX, …
Run Code Online (Sandbox Code Playgroud)

r

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

修改S3对象而不返回它?

我是 R 中面向对象编程的新手,并且正在努力解决如何正确编写修改对象的函数。

这个例子有效:

store1 <- list(
  apples=3,
  pears=4,
  fruits=7
)
class(store1) <- "fruitstore"
print.fruitstore <- function(x) {
  paste(x$apples, "apples and", x$pears, "pears", sep=" ")
}
print(store1)
addApples <- function(x, i) {
x$apples <- x$apples + i
x$fruits <- x$apples + x$pears
return(x)
}
store1 <- addApples(store1, 5)
print(store1)
Run Code Online (Sandbox Code Playgroud)

但我想应该有一种更干净的方法来做到这一点而不返回整个对象:

addApples(store1, 5)  # Preferable line...
store1 <- addApples(store1, 5)  # ...instead of this line
Run Code Online (Sandbox Code Playgroud)

在 R 中编写修改函数的正确方法是什么?“<<-”?

更新:感谢大家为 R 中的 OOP 编写的 Rosetta Stone。内容非常丰富。我试图解决的问题在流程方面非常复杂,因此参考类的刚性可能会给结构带来帮助。我希望我可以接受所有回复作为答案,而不仅仅是一个。

r r-s3

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

用data.table查找重叠间隔的组

我有多个间隔,需要找出哪些间隔会形成一个连续的组。

在此MWE中,我具有Interval.id,Interval.start和Interval.end。我想计算Wanted.column。

DT <- data.table(Interval.id=c(1L, 2L, 3L, 4L, 5L, 6L),
                 Interval.start=c(2.0, 3.0, 4.0, 4.6, 4.7, 5.5),
                 Interval.end=c(4.5, 3.5, 4.8, 5.0, 4.9, 8.0),
                 Wanted.column=c(1L, 1L, 1L, 1L, 1L, 2L))
Run Code Online (Sandbox Code Playgroud)

我想foverlaps是这里的朋友,但我不知道如何。

如何计算Wanted.column?

r data.table

6
推荐指数
2
解决办法
86
查看次数

标签 统计

r ×10

data.table ×4

knitr ×2

c ×1

c++ ×1

json ×1

r-markdown ×1

r-s3 ×1

reveal.js ×1

sweave ×1