小编Mat*_*ler的帖子

调整R Markdown HTML输出的输出宽度

我正在生成HTML输出,但我遇到R代码输出的输出宽度问题.

我能够毫无困难地调整图形宽度,但是当我尝试编写数据表或因子载荷时,R输出的固定宽度仅为我屏幕宽度的三分之一左右.这导致表的列被拆分而不是单个表中显示的所有列.

这是一个可重复的例子:

---
output: html_document
---

# Title

```{r echo = FALSE, fig.width=16, fig.height=6}
x = matrix(rnorm(100),ncol=10)
x
plot(x)
```
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

knitr r-markdown

57
推荐指数
2
解决办法
5万
查看次数

在列的子集(.SDcols)上应用函数,同时在另一列(在组内)应用不同的函数

这非常类似于将一个共同功能应用于一个data.table完整.SDcols 答案的多个列的问题.

不同之处在于我想同时在不属于.SD子集的另一列上应用不同的函数.我在下面发布一个简单的例子来展示我尝试解决问题:

dt = data.table(grp = sample(letters[1:3],100, replace = TRUE),
                v1 = rnorm(100), 
                v2 = rnorm(100), 
                v3 = rnorm(100))
sd.cols = c("v2", "v3")
dt.out = dt[, list(v1 = sum(v1),  lapply(.SD,mean)), by = grp, .SDcols = sd.cols]
Run Code Online (Sandbox Code Playgroud)

产生以下错误:

Error in `[.data.table`(dt, , list(v1 = sum(v1), lapply(.SD, mean)), by = grp,  
: object 'v1' not found
Run Code Online (Sandbox Code Playgroud)

现在这是有道理的,因为v1列不包含在必须首先计算的列子集中.所以我通过将其包含在我的列子集中进一步探索:

sd.cols = c("v1","v2", "v3")
dt.out = dt[, list(sum(v1), lapply(.SD,mean)), by = grp, .SDcols = …
Run Code Online (Sandbox Code Playgroud)

r subset lapply data.table

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

包含NAs的因子列的唯一值=>"哈希表已满"错误

我有一个57m记录和9列的data.table,当我尝试运行一些摘要统计时,其中一个会导致问题.有问题的列是3699级别的因素,我从以下代码行收到错误:

    > unique(da$UPC)
    Error in unique.default(da$UPC): hash table is full
Run Code Online (Sandbox Code Playgroud)

现在很明显我只会使用:levels(da$UPC)但我试图计算每个组中存在的唯一值,作为data.table组语句中多个j参数/ caluclations的一部分.

有趣的unique(da$UPC[1:1000000])是按预期工作,但unique(da$UPC[1:10000000])没有.鉴于我的表有57m记录,这是一个问题.

我尝试将因子转换为字符,这没有问题,如下所示:

    da$UPC = as.character(levels(da$UPC))[da$UPC]
    unique(da$UPC)
Run Code Online (Sandbox Code Playgroud)

这样做确实向我展示了一个额外的"水平" NA.因此,因为我的数据在因子列中有一些NA,所以唯一函数无法工作.我想知道这是否是开发人员意识到需要修复的东西?我发现以下关于r-devel的文章可能是相关的,但我不确定,也没有提及data.table.

链接文章:唯一(1:3,nmax = 1)冻结R!

    sessionInfo:

    R version 3.0.1 (2013-05-16)
    Platform: x86_64-unknown-linux-gnu (64-bit)

    locale:
     [1] LC_CTYPE=C                    LC_NUMERIC=C
     [3] LC_TIME=en_US.iso88591        LC_COLLATE=C
     [5] LC_MONETARY=en_US.iso88591    LC_MESSAGES=en_US.iso88591
     [7] LC_PAPER=C                    LC_NAME=C
     [9] LC_ADDRESS=C                  LC_TELEPHONE=C
     [11] LC_MEASUREMENT=en_US.iso88591 LC_IDENTIFICATION=C

    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base

    other attached packages:
    [1] plyr_1.8         data.table_1.8.8
Run Code Online (Sandbox Code Playgroud)

r unique na r-factor

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

Windows 8(64位)上的R中foreach循环的内存问题(doParallel包)

我正试图从串行方法转向并行方法来完成一些大型的多变量时间序列分析任务data.table.该表包含许多不同组的数据,我正在尝试使用该包从for循环移动到循环以利用安装的多核处理器.foreachdoParallel

我遇到的问题与内存以及新R进程似乎消耗大量内存有关.我认为正在发生的事情是data.table包含所有数据的大型数据被复制到每个新进程中,因此我用完RAM并且Windows开始交换到磁盘.

我创建了一个简化的可重现的示例,它复制了我的问题,但循环内部的数据更少,分析更少.如果存在的解决方案只能按需将数据分配给工作进程,或者共享核心之间已经使用的内存,那将是理想的选择.或者,可能已存在某种解决方案将大数据拆分为4个块并将其传递给核心,以便它们具有可用的子集.

之前已经在Stackoverflow上发布类似的问题,但我无法使用提供的bigmemory解决方案,因为我的数据包含字符字段.我将进一步研究这个iterators方案,但是我很欣赏那些在实践中遇到这个问题经验的成员的建议.

rm(list=ls())
library(data.table)
num.series = 40    # can customise the size of the problem (x10 eats my RAM)
num.periods = 200  # can customise the size of the problem (x10 eats my RAM)
dt.all = data.table(
    grp     = rep(1:num.series,each=num.periods), 
    pd      = rep(1:num.periods, num.series), 
    y       = rnorm(num.series * num.periods),
    x1      = rnorm(num.series * num.periods),
    x2      = rnorm(num.series * num.periods)
) …
Run Code Online (Sandbox Code Playgroud)

memory foreach r data.table

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

与foreach拆分data.tables时的迭代器问题:{:未定义列中的错误已选中

使用foreach软件包调试这个问题很难,因为我可重复的示例工作正常,但这里是对问题的简要描述以及我想要实现的目标.

我正在使用最初由Steve Weston发布的一些代码,这些代码将data.table根据一个关键列进行拆分,这是一个因素.迭代器将循环遍历"块",data.table并且可以访问表的拆分和用于生成拆分(键)的索引值.

虽然这种方法在我之前的各种场合都有用,但在这种情况下,我在foreach循环中接收并出错.

Error in { : undefined columns selected
Run Code Online (Sandbox Code Playgroud)

触发该问题的代码如下:

library(foreach)
library(data.table)

str(dat.in)
names(dat.in)
class(dat.in$fc.item)
key(dat.in)
library(foreach)
fc = foreach(dt.sub = isplitDT(dat.in, levels(dat.in$fc.item))) %do%
{
    # code to execute on each core/iteration
    print(dt.sub$key[1])
    dt.sub$value 
}
Run Code Online (Sandbox Code Playgroud)

数据已经输出dput,可以在问题的底部找到.

dat.in用以下结果检查了我的对象:

    > str(dat.in)
Classes ‘data.table’ and 'data.frame':  313 obs. of  3 variables:
 $ fc.item: Factor w/ 1 level "A": 1 1 1 1 1 1 1 1 1 …
Run Code Online (Sandbox Code Playgroud)

foreach r data.table

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

在 Linux 集群上安装 R `forecast` 包:编译器问题?

我希望测试性能R,更具体地说是forecast在具有英特尔至强融核协处理器的 HPC 集群上的包中的一些例程。据我了解,系统管理员已R/3.2.5按照英特尔网站上的说明从源代码构建:https : //software.intel.com/en-us/articles/build-r-301-with-intel-c-compiler-and-intel -mkl-on-linux

因此,可以在使用安装到本地用户特定库的会话中执行R包括devtoolsdata.tabledplyrggplot2、在内的软件包的安装。我提到这些包的原因是它们都需要某种形式的编译,因此我需要在我的文件中包含该行以加载编译器。RcppRcppArmadilloRinstall.packagesmodule load intel/15.2.164.bashrc

但是,当我开始安装该forecast软件包时,却失败了。有很长的文本输出流(见下文),但总而言之,似乎与编译器相关的某些事情失败了:

/gpfs/stfc/local/apps/intel/intel_cs/2015.2.164/composer_xe_2015.2.164/compiler/include/complex(115): error #308: member "std::complex<float>::_M_value" (declared at line 1157 of "/usr/include/c++/4.4.7/complex") is inaccessible
          return __x._M_value + __y._M_value;
Run Code Online (Sandbox Code Playgroud)

恐怕我对编译软件和管理/安装知之甚少:这些问题以前在我的 Mac 或大学 Linux 集群上从未发生过。

> install.packages("forecast")
Installing package into '/gpfs/stfc/local/HCPhi012/mjw01/mjw93-mjw01/library/R/3.2.5'
(as 'lib' is unspecified)
trying URL 'https://www.stats.bris.ac.uk/R/src/contrib/forecast_7.1.tar.gz'
Content type 'application/x-gzip' length 196896 bytes (192 KB)
==================================================
downloaded …
Run Code Online (Sandbox Code Playgroud)

r icc forecasting rcpp xeon-phi

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

标签 统计

r ×5

data.table ×3

foreach ×2

forecasting ×1

icc ×1

knitr ×1

lapply ×1

memory ×1

na ×1

r-factor ×1

r-markdown ×1

rcpp ×1

subset ×1

unique ×1

xeon-phi ×1