小编ajb*_*ajb的帖子

使用.SDcols在data.table中的列子集中应用函数

我想在data.table中的变量子集上应用函数.在这种情况下,我只是改变变量类型.我可以在data.table中以几种不同的方式执行此操作,但是我正在寻找一种不需要中间分配的方法(mycols在此示例中),并且不需要我指定要更改两次的列.这是一个简化的可重现的例子:

library('data.table')
n<-30
dt <- data.table(a=sample(1:5, n, replace=T),
       b=as.character(sample(seq(as.Date('2011-01-01'), as.Date('2015-01-01'), length.out=n))),
       c1235=as.character(sample(seq(as.Date('2012-01-01'), as.Date('2013-01-01'), length.out=n))),
       d7777=as.character(sample(seq(as.Date('2012-01-01'), as.Date('2013-01-01'), length.out=n)))
)
Run Code Online (Sandbox Code Playgroud)

方式1:这有效......但它是硬编码的

mycols <- c('b', 'c1235', 'd7777')
dt1 <- dt[,(mycols):=lapply(.SD, as.Date), .SDcols=mycols]
Run Code Online (Sandbox Code Playgroud)

方式2:这有效...但我需要创建一个中间对象让它工作(mycols)

mycols <- which(sapply(dt, class)=='character')
dt2 <- dt[,(mycols):=lapply(.SD, as.Date), .SDcols=mycols]
Run Code Online (Sandbox Code Playgroud)

方式3:这有效,但我需要两次指定这个长表达式

dt3 <- dt[,(which(sapply(dt, class)=='character')):=lapply(.SD, as.Date), .SDcols=which(sapply(dt, class)=='character')]
Run Code Online (Sandbox Code Playgroud)

方式4:这不起作用,但我想要这样的东西,只允许我指定.SDcols一次变量.我正在寻找一些方法来取代有用(.SD):=的东西......或者把东西连在一起.真的,我很想知道是否有人有一个方法来执行在WAY 1,2,3中完成的操作,而没有指定一个膨胀环境并且不需要两次指定相同列的中间分配.

dt3 <- dt[,(.SD):=lapply(.SD, as.Date), .SDcols=which(sapply(dt, class)=='character')]
Run Code Online (Sandbox Code Playgroud)

r data.table

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

编辑 rmarkdown 和 knit 报告的文本/注释,无需重新运行代码

我喜欢knitr& rmarkdown,但我经常发现自己有一份很长的报告,需要花费一些不小的时间来运行。生成后,我注意到文本中不可避免的拼写错误。然而,重新编织所有内容只是为了修复几个拼写错误(只是文本中的错误,而不是代码中的错误)需要很长时间,而且似乎是可以避免的。我正准备开始尝试开发自己的解决方案,但我认为这种事情已经有一个成熟的解决方案,可能比我构建的解决方案更强大。

我想知道是否有内部knitr或第三方的解决方案允许我只编辑报告的文本而无需重新运行代码、生成绘图和输出等。我知道,我可以简单地编辑生成的 html 文本,但是然后这些更改必须在生成它的 R/Rmd 代码中复制,否则它们会不同步。我正在设想这样的功能:

  • 参数 1:带有文本编辑的 R/Rmd 脚本(无代码更改)...当代码块更改时可能会生成警告
  • 参数 2:上次编织参数中的 R 脚本时的 html 输出文件,无需进行文本编辑。
  • return:使用 R/Rmd 脚本(参数 1)中的注释更新的 html 报告(参数 2)。

cache有时会针对大型数据集使用该选项。如果我只是处理报告的文本,我会在开发时切换eval和关闭。echo然而,我正在寻找一个可以为我处理所有这些问题的函数,这样就不必弄乱代码和块选项来对文本进行小的编辑。

r knitr r-markdown

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

标签 统计

r ×2

data.table ×1

knitr ×1

r-markdown ×1