我用LD_PRELOADing一个特定的库来运行一个程序.像这样.
LD_PRELOAD=./my.so ./my_program
Run Code Online (Sandbox Code Playgroud)
如何使用gdb运行此程序?
以下代码确实有效,但我找不到任何关于帮助和插图中" .."(点点)运算符的文档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) 我在我的代码中从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) 我想gdb在两个用例的行尾的命令提示符中注释命令:
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) 我是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)
我想做的是
iddate_up第一行,code …我有两个包含许多字段的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我发现了一个功能请求:
在包含对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工作吗?
我有一个简单的 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 脚本,它使用名为 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。如果您在文件上手动调用源代码,断点仍然有效,但只有在执行完文件中的所有代码后才会启用。
我认为这就是它不起作用的原因,但它没有提到解决方法。
如果你们有任何帮助,我们将不胜感激。
如何在幻灯片的左页边距处对齐列表项?
似乎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包.