小编R G*_*cey的帖子

将 S4 对象转换为数据帧的一般方法 (R)

我有许多 S4 对象,它们具有可变数量的插槽和插槽名称。每个时隙中的数据长度相同。例如 S4 对象peaks

> str(peaks)
Formal class 'MassPeaks' [package "MALDIquant"] with 4 slots
  ..@ snr      : num [1:16] 37.81 9.18 8.65 4.66 53.22 ...
  ..@ mass     : num [1:16] 307 317 325 337 347 ...
  ..@ intensity: num [1:16] 2255 547 516 278 3173 ...
  ..@ metaData : list()
Run Code Online (Sandbox Code Playgroud)

我想将这些 S4 对象转换为数据帧。例如数据框df.peaks

> str(df.peaks)
'data.frame':   16 obs. of  3 variables:
 $ snr      : num  37.81 9.18 8.65 4.66 53.22 ...
 $ mass     : num …
Run Code Online (Sandbox Code Playgroud)

r dataframe s4

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

R 中大数据高效字符串匹配(和索引)的技巧?

我想做的事

我有许多唯一的 ID,例如id1, id2, etc.。它们出现在多个组中,每个组都是 1 到 100 个 id 之间的随机样本,例如

[1] "id872- id103- id746-"                             
[2] "id830- id582-"                                   
[3] "id663- id403- id675- id584- id866- id399- id28- id550-"
Run Code Online (Sandbox Code Playgroud)

我想找到一个id所属的所有组,例如id1

groups.with.id[1] = grep("id1-", groups)
Run Code Online (Sandbox Code Playgroud)

我的问题

数据量很大(80k id,1M 个组),在我的笔记本电脑上大约需要12 个小时。我认为这是我正在执行 80k 次(每个 id 一次)以及每次访问一个巨大对象(1M 组)的事实的组合。

有什么办法可以提高效率吗?

(我经常遇到 REg 中较大对象的问题,重复索引具有 >10k 行的数据帧会变得非常慢。也赞赏大型对象的有效索引的一般答案!

示例代码

# make toy dataset
n.ids = 80000 # number of unique ids
n.groups = 100 # number of groupings

# make data
ids = …
Run Code Online (Sandbox Code Playgroud)

string r string-matching processing-efficiency large-data

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

非方阵中的最大集团问题

我有很多非方阵,如下例所示:

1    1    0
1    1    0
1    1    0
1    0    1
Run Code Online (Sandbox Code Playgroud)

我想要一个通用的解决方案来找到这些矩阵中最大的密集连接区域。因此,对于我的示例,解决方案将返回rows=c(1, 2, 3), columns=c(1,2). 也就是说,我可以接受非最佳解决方案,即局部最小值就可以了。

我认为这类似于max-clique 问题。然而,我的矩阵不是方形的,它们不代表图形,所以我在使用像igraph::cliques(). 如何找到非方阵的密集连接区域?

为了澄清“密集区域”,我指的是矩阵中包含全 1 的任何矩形块,这可以通过重新排序行和列来实现。因此,原始矩阵中行和列的顺序并不重要,我想考虑顺序的所有排列。我真的在寻找与邻接矩阵中的派系类似/等效的区域,但是,同样,这些矩阵不是方形的。

r graph-theory matrix igraph

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

从触发者启动的作业中获取 SLURM 作业 ID

我有一个由三部分组成的 R 分析(partApartBpartC)。我将每个部分提交给 SLURM(例如sbatch partA),并且每个部分都通过 并行化#SBATCH --array=1-1500。这些零件是连续的,所以我需要等待一个零件完成才能开始下一个零件。现在我正在手动启动每项工作,但这不是一个很好的解决方案。

我想自动化这三个批处理调用。例如:

  1. sbatch partA
  2. 什么时候partA完成,sbatch partB
  3. 什么时候partB完成,sbatch partC

我使用此解决方案获取 的作业 ID partA,并将其传递给strigger完成上面的步骤 2。然而我陷入了困境,因为我不知道如何获取partBfromstrigger的工作 ID 。我的代码如下所示:

#!/bin/bash

# step 1: sbatch partA
partA_ID=$(sbatch --parsable partA.sh)

# step 2: sbatch partB
strigger --set --jobid=$partA_ID --fini --program=/path/to/partB.batch

# step 3: sbatch partC
... ?
Run Code Online (Sandbox Code Playgroud)

我该如何完成第 3 步?

linux hpc r batch-processing slurm

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

R中的数据探索:快速显示大矩阵的热图?

如何快速可视化R中的大型矩阵?

我有时使用大型数字矩阵(例如3000 x 3000),并且快速可视化它们是一个非常有用的质量控制步骤.这在我以前选择的语言Matlab中非常简单快捷.例如,显示1000x1000矩阵需要0.5秒:

rand_matrix = rand(1000,1000);
tic
imagesc(rand_matrix)
toc
>> Elapsed time is 0.463903 seconds.
Run Code Online (Sandbox Code Playgroud)

我想在R中具有相同的能力,但遗憾的是,在R中,可视化矩阵似乎非常缓慢.例如,使用image.plot()相同的随机矩阵需要10秒以上才能显示:

require(tictoc)
require(image.plot)
mm = 1000
nn = 1000
rand.matrix = matrix(runif(mm*nn), ncol=mm, nrow=nn)
tic("Visualizing matrix")
image.plot(rand.matrix)
toc()
> Visualizing matrix: 11.744 sec elapsed
Run Code Online (Sandbox Code Playgroud)

随着矩阵变大,问题变得更糟.例如,与Matlab中的秒数相比,3000x3000矩阵在R中可视化需要几分钟.这显然不适用于数据探索.我尝试过ggplot,而熔化+ geom_raster()仍然需要一分钟.

我究竟做错了什么?有没有一种快速的方法可视化R中的矩阵?一个理想的解决方案需要一两行.

matlab visualization r data-visualization matrix

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