相关疑难解决方法(0)

监视R中的内存使用情况

是否可以监视正在使用或已被R用于调用函数的内存量?例如,我有一个任意函数,例如:

smallest.sv <- function(){
  A <- matrix(rnorm(1e6), 1e3);
  mysvd <- svd(A);
  return(tail(mysvd$d, 1));
}
Run Code Online (Sandbox Code Playgroud)

运行该函数只返回一个标量,但是使用了大量的内存来计算函数.现在我需要进行性能基准测试.处理时间很简单:

system.time(x <- smallest.sv())
Run Code Online (Sandbox Code Playgroud)

但是我还想知道这个调用需要多少内存,而不需要修改函数(它应该适用于任意函数).有没有办法做到这一点?

编辑:澄清一下.我最感兴趣的是在函数调用期间使用的内存上限,即需要多少物理内存才能处理函数调用.在许多情况下,这远远低于我认为的分配内存总量.

r

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

是否有一种 RAM 有效的方法来计算补集的中位数?

我正在寻找一种 RAM 有效的方法来在 data.table 的帮助下计算补集的中位数。

对于来自不同组的一组观察结果,我对“其他组”中位数的实现感兴趣。即,如果一个 data.table 有一个值列和一个分组列,我想为每个组计算除当前之外的所有其他组中值的中位数。例如,对于第 1 组,我们计算除属于第 1 组的值以外的所有值的中位数,依此类推。

一个具体的例子 data.table

dt <- data.table(value = c(1,2,3,4,5), groupId = c(1,1,2,2,2))
dt
#    value groupId
# 1:     1       1
# 2:     2       1
# 3:     3       2
# 4:     4       2
# 5:     5       2
Run Code Online (Sandbox Code Playgroud)

我希望将medianOfAllTheOtherGroups 定义为第2 组的1.5 并定义第1 组的4,对同一data.table 中的每个条目重复:

dt <- data.table(value = c(1,2,3,4,5), groupId = c(1,1,2,2,2), medianOfAllTheOtherGroups = c(4, 4, 1.5, 1.5, 1.5))

dt
#    value groupId medianOfAllTheOtherGroups …
Run Code Online (Sandbox Code Playgroud)

ram r median data.table

11
推荐指数
2
解决办法
579
查看次数

R:循环遍历data.table中的列

我想确定一个大型data.table的列类.

colClasses <- sapply(DT, FUN=function(x)class(x)[1])
Run Code Online (Sandbox Code Playgroud)

有效,但显然本地副本存储在内存中:

> memory.size()
[1] 687.59
> colClasses <- sapply(DT, class)
> memory.size()
[1] 1346.21
Run Code Online (Sandbox Code Playgroud)

循环似乎不可能,因为data.table"with = FALSE"总是产生data.table.

一种快速而又非常脏的方法是:

DT1 <- DT[1, ]
colClasses <- sapply(DT1, FUN=function(x)class(x)[1])
Run Code Online (Sandbox Code Playgroud)

最优雅,最有效的方法是什么?

r sapply data.table

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

“Rprof”内存分析输出的解释

我正在尝试使用分析来查看我的代码的哪一部分负责最大使用 3GB 内存(如gc()最大使用内存统计报告所示,请参阅此处如何)。我正在运行这样的内存分析:

Rprof(line.profiling = TRUE, memory.profiling = TRUE)
graf(...) # ... here I run the profiled code
Rprof(NULL)
summaryRprof(lines = "both", memory = "both")
Run Code Online (Sandbox Code Playgroud)

输出如下:

$by.total
                       total.time total.pct mem.total self.time self.pct
"graf"                     299.12     99.69   50814.4      0.02     0.01
#2                         299.12     99.69   50814.4      0.00     0.00
"graf.fit.laplace"         299.06     99.67   50787.2      0.00     0.00
"doTryCatch"               103.42     34.47    4339.2      0.00     0.00
"chol"                     103.42     34.47    4339.2      0.00     0.00
"tryCatch"                 103.42     34.47    4339.2      0.00     0.00
"tryCatchList"             103.42     34.47    4339.2      0.00     0.00
"tryCatchOne"              103.42 …
Run Code Online (Sandbox Code Playgroud)

r memory-profiling

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

标签 统计

r ×4

data.table ×2

median ×1

memory-profiling ×1

ram ×1

sapply ×1