小编R Y*_*oda的帖子

如何将gdb与LD_PRELOAD一起使用

我用LD_PRELOADing一个特定的库来运行一个程序.像这样.

LD_PRELOAD=./my.so ./my_program
Run Code Online (Sandbox Code Playgroud)

如何使用gdb运行此程序?

c linux gcc gdb x86-64

47
推荐指数
4
解决办法
2万
查看次数

为什么".."可以在字符向量变量中传递列名?

以下代码确实有效,但我找不到任何关于帮助和插图中" .."(点点)运算符的文档data.table:

library(data.table)
cols <- c("mpg", "gear")
DT <- as.data.table(mtcars)
DT[ , ..cols]
Run Code Online (Sandbox Code Playgroud)

输出是:

     mpg gear
 1: 21.0    4
 2: 21.0    4
 3: 22.8    4
 4: 21.4    3
 5: 18.7    3
...
Run Code Online (Sandbox Code Playgroud)

为什么这样做,是否有任何文件?

PS:通常我会使用mget等...

编辑1:这不是保留名称的一个简单的ř特征...,..1,..2等等,这些都是用来指从主叫功能(参见向下传递的参数?Reserved).我的例子不使用数字,而是使用两个点后的字符.

编辑2:这不重复,因为Rich Scriven的示例显示:

> mtcars[, ..cols]
Error in `[.data.frame`(mtcars, , ..cols) : object '..cols' not found
Run Code Online (Sandbox Code Playgroud)

r data.table

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

如何从基地模拟功能?

我在我的代码中从base调用一个函数,我想在我的testthat单元测试中模拟这个函数.

我怎样才能做到这一点?

library(testthat)

my.func <- function() {
  return(Sys.info()["sysname"])   # e. g. "Linux"
}

my.func()
# sysname 
# "Linux" 

test_that("base function can be mocked",
  with_mock(
    Sys.info = function() return(list(sysname = "Clever OS")),  # see edit 2 !!!
    expect_equal(my.func(), "Clever OS", fixed = TRUE)
  )
)
# Error: Test failed: 'base function can be mocked'
# * my.func() not equal to "Clever OS".
Run Code Online (Sandbox Code Playgroud)

?with_mock 说:

无法模拟基础包中的函数,但可以通过定义包装函数轻松解决此问题.

我可以Sys.info()通过我my.func从那时调用的包装器函数来封装基函数调用,但我们假设我不能这样做,因为我正在测试一个我无法更改的包中的函数...

对此有何解决方案?

我在Ubuntu 14.04上使用R3.4.4 64位,testthat为2.0.0.9000.

编辑1:

运用

`base::Sys.info` = function() …
Run Code Online (Sandbox Code Playgroud)

r mocking testthat

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

gdb 是否支持命令行中的注释(gdb 提示符)?

我想gdb在两个用例的行尾的命令提示符中注释命令:

  1. 编写教程
  2. 记录gdb自动执行的命令文件

虽然gdb命令文件似乎支持通过散列(#)符号进行注释 ,但我找不到gdb命令行的任何命令标记:

(gdb) print 1
$2 = 1
(gdb) print 1   // comment
A syntax error in expression, near `/ comment'.
(gdb) print 1   -- comment
A syntax error in expression, near `comment'.
(gdb) print 1   # comment
Invalid character '#' in expression.
(gdb) print 1   ; comment
Invalid character ';' in expression.
(gdb) print 1   /* comment */
No symbol "comment" in current context. …
Run Code Online (Sandbox Code Playgroud)

gdb

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

使用同一组中满足条件的下一个第一行设置列值

我是R的新手,这是我关于stackoverflow的第一个问题。

我在尝试

  • 通过引用分配给新列
  • 每行
  • 使用同一组行中的下一个第一行的值
  • 符合条件的

示例数据:

    id code  date_down    date_up
 1:  1    p 2019-01-01 2019-01-02
 2:  1    f 2019-01-02 2019-01-03
 3:  2    f 2019-01-02 2019-01-02
 4:  2    p 2019-01-03       <NA>
 5:  3    p 2019-01-04       <NA>
 6:  4 <NA> 2019-01-05 2019-01-05
 7:  5    f 2019-01-07 2019-01-08
 8:  5    p 2019-01-07 2019-01-08
 9:  5    p 2019-01-09 2019-01-09
10:  6    f 2019-01-10 2019-01-10
11:  6    p 2019-01-10 2019-01-10
12:  6    p 2019-01-10 2019-01-11
Run Code Online (Sandbox Code Playgroud)

我想做的是

  • 子集(组) id
  • 每行
  • 找到date_up第一行,
  • 其中,code …

r data.table

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

R data.table join:连接表中的SQL"select*"类似语法?

我有两个包含许多字段的data.tables.

我想加入这两个表,添加一些计算字段并附加第一个,第二个或两个表中的所有其他字段(类似于SQL select a+b AS sum, DT1.*, DT2.* FROM...)而不键入所有字段名称.

我该怎么做(关于最简单的语法和最佳性能)?

简化的示例数据:

library(data.table)
DT1 = data.table(x=c("c", "a", "b", "a", "b"), a=1:5)
DT2 = data.table(x=c("d", "c", "b"), b=6:8)
Run Code Online (Sandbox Code Playgroud)

现在我想加入表并添加一个计算字段:

DT1[DT2, .(sum=a + b, <<< how to say DT1.*, DT2.* here? >>> ), on="x"]
Run Code Online (Sandbox Code Playgroud)

2016年5月4日更新: 灵感来自用户jangorecki我发现了一个功能请求:

在加入期间应该可以参考我的.SD

join r data.table

8
推荐指数
2
解决办法
598
查看次数

使用data.table进行内存分析

在包含对data.table函数调用的R代码中分析内存的正确方法是什么?假设我要确定表达式期间的最大内存使用量。

该参考文献表明Rprofmem可能不是正确的选择:https : //cran.r-project.org/web/packages/profmem/vignettes/profmem.html

记录通过R的本机API的本机allocVector3()部分完成的所有内存分配,这意味着几乎所有的内存分配都被记录。R的垃圾收集器会在某些时候自动释放所有以这种方式分配的对象。profmem()不会记录垃圾收集事件。未记录的分配是由非R本机库或将内部代码Calloc()/ Free()用于内部对象的R包完成的分配。R垃圾收集器不处理此类对象。

data.table源代码包含对的大量调用Calloc()malloc()因此这表明这Rprofmem将无法衡量data.table函数分配的所有内存。如果Rprofmem不是正确的工具,那么Matthew Dowle怎么在这里使用它:R:循环遍历data.table中的列

我发现了一个参考文献,提出了类似的潜在问题gc()(可用于测量两次调用之间的最大内存使用量gc()):https : //r.789695.n4.nabble.com/Determining-the-maximum-memory-usage -of-a-function-td4669977.html

gc()是一个好的开始。在任务执行之前调用gc(reset = TRUE),在执行任务之后调用gc(),您会在此期间看到R占用的最大额外内存。(这不包括编译后的代码分配的内存,这在重新使用时很难测量。)

我没有发现任何暗示存在类似问题Rprof(memory.profiling=TRUE)。这是否意味着即使不总是使用R API分配内存,该Rprof方法data.table仍然适用?

如果Rprof(memory.profiling=TRUE)实际上不是该工作的正确工具,那是什么?

ssh.utils::mem.usage工作吗?

r memory-profiling data.table

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

如何使用 tracemem 功能在代码块中抑制 knitr/RMarkdown“eval eval withVisible ...”输出?

我有一个简单的 RMarkdown 文档:

---
title: "Untitled"
author: "Author"
date: "November 22, 2015"
output: html_document
---

```{r}
x <- 1:10
tracemem(x)
x[2] <- 22
```
Run Code Online (Sandbox Code Playgroud)

当我将它编织成 HTML(使用 RStudio -> Knit HTML 按钮)时,它显示了来自 tracemem 的奇怪输出(“ eval eval withVisible... ”):

x <- 1:10
tracemem(x)
## [1] "<0x32b7c28>"
x[2] <- 22
## tracemem[0x32b7c28 -> 0x33cda68]: eval eval withVisible withCallingHandlers handle evaluate_call <Anonymous> in_dir block_exec call_block process_group.block process_group withCallingHandlers process_file <Anonymous> <Anonymous>
## tracemem[0x33cda68 -> 0x2bcd818]: eval eval withVisible withCallingHandlers handle evaluate_call <Anonymous> in_dir block_exec …
Run Code Online (Sandbox Code Playgroud)

r rstudio knitr r-markdown

5
推荐指数
0
解决办法
270
查看次数

调试主 Rscript 时如何在函数体内启用断点

我有一个主 R 脚本,它使用名为 Multiply() 的函数执行乘法。

debugSource("C:/Users/R_debug_breakpoint/myFunction.R")
a<-1
b<-2
mult<-Multiply(a,b)
Run Code Online (Sandbox Code Playgroud)

我在名为“myFunction.R”的不同 R 脚本中编写 Multiply()

“myFunction.R”看起来像这样:

Multiply<-function(a,b){
  c<-a+b
  e<-a/b
  d<-a*b
  return(d)
}
Run Code Online (Sandbox Code Playgroud)

如果我想在 Multiply() 函数内的以下行设置断点: d<-a*b 并进入源代码模式以查看 c,e 的值。

但是,当我按下 main.R 中的 Source 选项时,调试器不会在我在 Muliply 函数中设置的断点处停止。它只是运行 main.R 中的所有代码。

我在很多网页上搜索过这个问题,最接近的是 How to set a Breakpoint in function body in R-studio?

但是,我这里使用了debugSource,但仍然失败。

我发现有用的关于断点的另一个博客是: https ://support.rstudio.com/hc/en-us/articles/200534337-Breakpoint-Troubleshooting

它说:为了在采购过程中命中断点,您需要使用 RStudio 中包含的特殊调试采购命令 debugSource。如果您在文件上手动调用源代码,断点仍然有效,但只有在执行完文件中的所有代码后才会启用。

我认为这就是它不起作用的原因,但它没有提到解决方法。

如果你们有任何帮助,我们将不胜感激。

debugging r breakpoints rstudio

5
推荐指数
0
解决办法
922
查看次数

带有reveal.js的R Markdown幻灯片:如何左对齐列表项(项目符号和数字)?

如何在幻灯片的左页边距处对齐列表项

似乎revealjs总是使用最长的列表项文本,将其居中在幻灯片上,然后左对齐此下的所有其他列表项:

---
title:
output: 
        revealjs::revealjs_presentation
---

## list items
* a
* picture
* says more
* than a thousand words

or

1. item 1
1. item 2
Run Code Online (Sandbox Code Playgroud)

我试图在幻灯片标题后嵌入一个CSS样式表,但它没有影响:

<style type="text/css">
  .reveal li {
    text-align: left;
  }
</style>
Run Code Online (Sandbox Code Playgroud)

PS:我正在使用RStudio revealjs包.

css markdown pandoc r-markdown reveal.js

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