小编pdb*_*pdb的帖子

R 3.6.0中的data.table包中是否存在内存泄漏?

在R 3.6.0(预发布)中,我只有 data.table包中的内存泄漏.这发生在CRAN版本以及GH版本上.

require(data.table)
n <- 2e6
df <- data.frame(a=rnorm(n),
                 b=factor(rbinom(n,5,prob=0.5),1:5,letters[1:5]),
                 c=factor(rbinom(n,5,prob=0.5),1:5,letters[1:5]))
dt <- setDT(df)
print(pryr::mem_used())
fff <- function(aref) {
  ff <- lapply(1:5, function(i) {
    dt2 <- dt[,list(sumA=sum(get(aref))),by=b][,c:=letters[i]]
    dt2
  })
  return(rbindlist(ff))
}
for(i in 1:10) {
  f <- fff("a")
  rm("f")
  gc()
  print(pryr::mem_used())
}
gc()
print(pryr::mem_used())
Run Code Online (Sandbox Code Playgroud)

退货(仅限 3.6.0 )

81.2 MB
81.2 MB
81.2 MB
184 MB
287 MB
390 MB
493 MB
596 MB
699 MB
802 MB
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

"get"和"by"的调用似乎都是必要的.`[,c:= letters [i]]不是,但它使内存泄漏显得更快.

我的会话信息

> sessionInfo()
R Under development …
Run Code Online (Sandbox Code Playgroud)

memory-leaks r data.table

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

在 NAMESPACE 中使用 Roxygen 制作 S3method

我想使用 roxygen2 导出一个名为 [.myclass 的 S3method,但我看不到一种干净的方法来做到这一点。

我需要 NAMESPACE

S3method("[",myclass)
Run Code Online (Sandbox Code Playgroud)

在其中或在我需要该包后无法使用该方法,但 roxygen2 似乎不想帮助我解决这个问题。

我可以强迫它

#' @S3method [ myclass
setMethodS3("[",
        c(x="myclass"),
        function(x,i) {
blah blah balh
})
Run Code Online (Sandbox Code Playgroud)

但是 roxygen 然后说 s3method 已弃用,我应该改用 @export,但是

#' @export
setMethodS3("[",
          c(x="myclass"),
          function(x,i) {
  blah blah balh
 })
Run Code Online (Sandbox Code Playgroud)

只是不这样做。(在 NAMESPACE 中放置一个空的导出)。

我问了包的作者,他建议我使用@method 和@export,但这也不起作用

#' @method [ myclass
#' @export
setMethodS3("[",
          c(x="myclass"),
          function(x,i) {
  blah blah balh
 })
Run Code Online (Sandbox Code Playgroud)

在 NAMESPACE 中也以“export()”结尾

我错过了什么?

r roxygen2

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

R CMD 构建无法忽略 .Rbuildignore 中引用的小插图

我有一个我想从构建中排除的小插图。是的,我可以删除它,但我认为 .Rbuildignore 应该在这里帮助我。我在 .Rbuildignore 中引用了该文件,但它并没有出现在包中。但是,R CMD check 给出了警告:

 * checking 'build' directory ... WARNING
 Output(s) listed in 'build/vignette.rds' but not in package:
   'inst/doc/ignoreMe.pdf'
Run Code Online (Sandbox Code Playgroud)

这是一个相关的问题R CMD build skips knitr/Rmd vignettes - “Output(s)列出在'build/vignette.rds'中但不在包中”仅,我希望忽略小插图(并且当它不生成警告时它被忽略)。那可能吗?

在指向 .Rbuildignore的Writing R Extensions索引链接中似乎没有提到这一点。

我为什么要这样做?我的开发周期使版本n得到完善,而版本n +1 正在开发中。这个小插图是n +1 的一部分,.Rbuildignore 帮助我排除该版本中的所有其他内容。

r knitr

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

R:不能使用0-cloud来安装.包

当我尝试从0-cloud安装软件包时,它不起作用

> install.packages("lfactors")
--- Please select a CRAN mirror for use in this session ---
Run Code Online (Sandbox Code Playgroud)

然后我从存储库列表中选择0-cloud.和R返回

Warning: unable to access index for repository https://cran.rstudio.com/src/contrib
Warning: unable to access index for repository https://cran.rstudio.com/bin/windows/contrib/3.2
Warning message:
package ‘lfactors’ is not available (for R version 3.2.1) 
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码并选择另一个存储库时,它确实有效.

我尝试关闭我的代理服务器,并在代理服务器上访问该网站,我可以在浏览器中访问它,没有任何问题.

有任何想法吗?

编辑:基于评论,我跑了这个

capabilities()["libcurl"]
libcurl 
   TRUE
Run Code Online (Sandbox Code Playgroud)

所以我认为不是那样的.

r rstudio

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

更改“调用”对象中的参数

我有一个调用对象,我想添加一个参数,并且我不想像这个答案那样使用解析。

所以,假设我有一个lm对象,那么来自lm

lma <- lm(mpg ~ cyl, data=mtcars)
lma$call
# lm(formula = mpg ~ cyl, data = mtcars)
Run Code Online (Sandbox Code Playgroud)

weights=wt现在,假设我想使用调用添加一个参数。我意识到有一种非常简单的方法来创建新的调用,但我想知道我是否可以使用调用对象。weights如果它已经在那里,还有一种编辑方法

lmb <- lm(mpg ~ cyl, data=mtcars, wei=wt)
cl <- lmb$call
wtpos <- which.max(pmatch(names(cl), "weights"))
cl[[wtpos]] <- mtcars$qsec
eval(cl)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,lma$call因为 中没有权重参数lma$call

所以,感觉我应该能够通过添加另一个元素来简单地“增长”调用,但我不知道该怎么做。例如,以下情况会失败:

cl <- lma$call
cl <- c(cl, weights=quote(wt))
eval(cl)
# [[1]]
# lm(formula = mpg ~ cyl, data = mtcars)
#
# $weights
# wt
Run Code Online (Sandbox Code Playgroud)

所以,我希望结果是一个等于 的新“lm”对象lmb,而不仅仅是一个列表。 …

r

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

标签 统计

r ×5

data.table ×1

knitr ×1

memory-leaks ×1

roxygen2 ×1

rstudio ×1