我有一个相当大的数据集(约1.4米行),我正在做一些拆分和总结.整个过程需要一段时间才能运行,我的最终应用程序依赖于频繁运行,所以我的想法是使用doMC和.parallel=TRUEplyr 的标志一样(简化了一点):
library(plyr)
require(doMC)
registerDoMC()
df <- ddply(df, c("cat1", "cat2"), summarize, count=length(cat2), .parallel = TRUE)
Run Code Online (Sandbox Code Playgroud)
如果我明确地将内核数量设置为2(使用registerDoMC(cores=2)),我的8 GB内存就可以看到我,并且它可以节省相当多的时间.但是,如果我让它使用所有8个内核,由于每个分叉进程似乎克隆了内存中的整个数据集,我很快就会耗尽内存.
我的问题是,是否有可能以更节省内存的方式使用plyr的并行执行工具?我尝试将我的数据帧转换为a big.matrix,但这似乎只是迫使整个事情回到使用单个核心:
library(plyr)
library(doMC)
registerDoMC()
library(bigmemory)
bm <- as.big.matrix(df)
df <- mdply(bm, c("cat1", "cat2"), summarize, count=length(cat2), .parallel = TRUE)
Run Code Online (Sandbox Code Playgroud)
这是我第一次涉足多核R计算,所以如果有更好的思考方式,我愿意接受建议.
更新:与生活中的许多事情一样,事实证明我在代码中的其他地方正在做其他愚蠢的事情,并且在这个特定的实例中,整个多处理问题变得没有实际意义.但是,对于大数据折叠任务,我会data.table记住.我能够以一种简单的方式复制我的折叠任务.
我经常发现自己在R中做了一些分析,然后想要制作一张快速地图.标准的plot()函数可以很快地完成一个合理的工作,但我很快就发现当我想制作看起来不错或符号要求更复杂的东西时我需要去ggplot2.Ggplot2很棒,但有时将SpatialPolygonsDataFrame转换为Ggplot2所需的格式很麻烦.在处理需要特定投影的大型地图时,Ggplot2也可能有点慢.
看起来我应该能够使用Mapnik直接从R绘制空间对象,但在耗尽我的Google-fu之后,我找不到任何绑定的证据.我没想到这样的东西不存在,我想我会在这里查看是否有人知道R-Mapnik绑定.
在R中找到这个非常有用的指南后,它让我想知道如何在Incanter做类似的事情.作为一个相对较新的Incanter,如果有人可以重现这个答案,那将是可爱的.
除了说明嵌套模型之外,对该答案的讨论还包括对如何迭代生成非嵌套模型列表的一些很好的讨论.我很好奇Clojure/Incanter最常用的做法是什么.
我想利用Clojure 的HDF5 java库.不幸的是,通常的方式包括java依赖(即通过Leiningen对Maven存储库的支持)是不可用的.这可能是因为HDF5-Java库是一组JNI包装的已编译C++和Fortran代码.
我看了Maven-izing最近版本的HDF5-Java,但是不明白平台特定版本是如何在那里处理的/决定了太多的痛苦.假设我坚持使用由HDF集团发布的特定于平台的罐子,是否有一种相对较好的方法来处理这些,同时继续大多生活在Leiningen的舒适世界中?
我有一个数据集,我试图根据条件进入"事件".某些记录表明新事件已经开始,而其他类型的记录表示没有变化/保持过程.
例如,在此数据集中,"左"或"右"操作将指示新事件的开始:
| Id | Action |
|-----+---------|
| 1 | Left |
| 2 | Forward |
| 3 | Forward |
| 4 | Right |
| 5 | Forward |
| 6 | Left |
| ... | ... |
Run Code Online (Sandbox Code Playgroud)
我想要的结果表看起来像:
| Id | Action | GroupId |
|-----+---------+---------|
| 1 | Left | 1 |
| 2 | Forward | 1 |
| 3 | Forward | 1 |
| 4 | Right | 2 | …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用lein-autodoc,因为我相信它是Clojure的首选文档生成器.我已:dev-dependencies [[lein-autodoc "0.9.0"]]根据lein-autodoc github页面上的说明添加到我的项目定义中.
运行lein deps运行没有问题,但是lein autodoc失败了,声称车博士不是一个任务.
我怀疑问题是lein-autodoc已经设置为与leiningen 1合作.但是,我正在使用leiningen 2.我是否应该用autodoc调用lein?或者是lein-autodoc包没有设置为与lein 2一起使用?如果没有,是否有另一个首选的lein2兼容文档生成选项?
编辑:
在Cubic的提示下面,我创建~/.lein/profiles.clj如下:
{:user {:plugins [[lein-autodoc "0.9.0"]]}}
Run Code Online (Sandbox Code Playgroud)
现在,运行lein autodoc结果如下:
$ lein autodoc
Exception in thread "main" java.lang.IllegalAccessError: sh does not exist
at clojure.core$refer.doInvoke(core.clj:3778)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_lib.doInvoke(core.clj:5279)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
(...)
Run Code Online (Sandbox Code Playgroud)
这表明autodoc可能与Lein 2不兼容?如果没有,是否有任何适用于Lein 2的文档系统?
认识到这可能与编码问题一样是一个统计问题,假设我使用Distributions.jl创建了正态分布:
using Distributions
mydist = Normal(0, 0.2)
Run Code Online (Sandbox Code Playgroud)
有没有一种好的,直截了当的方法,我应该去离散这样的分布,以获得PMF而不是PDF?
在R中,我发现精算包具有离散连续分布的功能.我没有找到类似朱莉娅的任何东西,但我想在滚动自己之前我会在这里查看.
我有一个半长数据框,格式如下:
| Id | Alt | Choice | Var1 | Var2 |
|----+-----+--------+------+------|
| 1 | a | TRUE | 58.2 | 4 |
| 1 | b | FALSE | 71.6 | 5 |
| 2 | a | FALSE | 14.8 | 2 |
| 2 | b | TRUE | 82.1 | 5 |
Run Code Online (Sandbox Code Playgroud)
...我想重塑为以下格式:
| Id | Choice.a | Choice.b | Var1.a | Var1.b | Var2.a | Var2.b |
|----+----------+----------+--------+--------+--------+--------|
| 1 | TRUE | FALSE …Run Code Online (Sandbox Code Playgroud)