小编Cor*_*one的帖子

如何通过胁迫引入NA时避免警告

我通常更喜欢编码R,以便我不会收到警告,但我不知道在使用as.numeric转换字符向量时如何避免收到警告.

例如:

x <- as.numeric(c("1", "2", "X"))
Run Code Online (Sandbox Code Playgroud)

会给我一个警告,因为它通过强制引入了NA.我希望通过强制来引入NA - 有没有办法告诉它"是的,这就是我想做的事情".或者我应该接受警告?

或者我应该使用不同的功能来执行此任务?

parsing casting r na

112
推荐指数
3
解决办法
20万
查看次数

在R data.table计算中使用上一行中的值

我想在data.table中创建一个新列,该列根据一列的当前值和另一列的前一列计算得出.是否可以访问以前的行?

例如:

> DT <- data.table(A=1:5, B=1:5*10, C=1:5*100)
> DT
   A  B   C
1: 1 10 100
2: 2 20 200
3: 3 30 300
4: 4 40 400
5: 5 50 500
> DT[, D := C + BPreviousRow] # What is the correct code here?
Run Code Online (Sandbox Code Playgroud)

应该是正确的答案

> DT
   A  B   C   D
1: 1 10 100  NA
2: 2 20 200 210
3: 3 30 300 320
4: 4 40 400 430
5: 5 50 500 540
Run Code Online (Sandbox Code Playgroud)

r data.table

72
推荐指数
5
解决办法
6万
查看次数

如何根据子串匹配选择R data.table行(像一个SQL一样)

我有一个带有字符列的data.table,并且只想选择那些包含子字符串的行.相当于SQLWHERE x LIKE '%substring%'

例如

> Months = data.table(Name = month.name, Number = 1:12)
> Months["mb" %in% Name]
Empty data.table (0 rows) of 2 cols: Name,Number
Run Code Online (Sandbox Code Playgroud)

我如何只选择Name包含"mb"的行?

r string-matching data.table

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

使用并行时如何"打印"或"猫"

如果我使用parSapplythen 调用函数print,message或者cat该函数内的语句似乎没有输出到控制台.

我的过程需要很长时间,因此我需要一些方法来查看进度并在结束时获得结果输出.是否有任何特殊命令可以让我从并行进程打印到控制台?

例:

library(parallel)

oneloop = function(x) {
  for(i in 1:50) {
    a = rnorm(100000)
    a = sort(a)
  }
  print(x)
  message(x)
  cat(x)
}

cl <- makeCluster(5)
output = parSapply(cl, 1:10, oneloop)
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

io parallel-processing r

42
推荐指数
1
解决办法
8598
查看次数

knitr被data.table`:=`赋值

似乎knitr不明白不DT[, a:=1]应该导致DT文档的输出.有没有办法阻止这种行为?

示例knitr文档:

Data.Table Markdown
========================================================
Suppose we make a `data.table` in **R Markdown**
```{r}
DT = data.table(a = rnorm(10))
```
Notice that it doesn't display the contents until we do a
```{r}
DT
```
style command.  However, if we want to use `:=` to create another column
```{r}
DT[, c:=5]
```
It would appear that the absence of a equals sign tricks `knitr` into thinking this 
is to be printed.
Run Code Online (Sandbox Code Playgroud)

针织输出: …

r knitr data.table

39
推荐指数
3
解决办法
4689
查看次数

是否有R函数来转义正则字符的字符串

我想构建一个正则表达式代替一些字符串来搜索,所以这些字符串需要在我将它们放入正则表达式之前进行转义,这样如果搜索的字符串包含正则表达式字符,它仍然可以工作.

某些语言具有为您执行此操作的功能(例如python re.escape:https://tackoverflow.com/a/10013356/1900520).R有这样的功能吗?

例如(组成功能):

x = "foo[bar]"
y = escape(x) # y should now be "foo\\[bar\\]"
Run Code Online (Sandbox Code Playgroud)

regex string r

21
推荐指数
3
解决办法
6897
查看次数

为什么knitr缓存失败了data.table`:=`?

这在精神上与这个问题有关,但必须在机制上有所不同.

如果您尝试缓存knitr包含data.table :=分配的块,那么它就好像该块尚未运行,后来的块看不到该影响:=.

知道为什么会这样吗?knitr检测对象如何更新,以及如何data.table混淆它?

看起来你可以通过这样做来解决这个问题DT = DT[, LHS:=RHS].

示例:

```{r}
library(data.table)
```
Data.Table Markdown
========================================================
Suppose we make a `data.table` in **R Markdown**
```{r, cache=TRUE}
DT = data.table(a = rnorm(10))
```
Then add a column using `:=`
```{r, cache=TRUE}
DT[, c:=5] 
```
Then we display that in a non-cached block
```{r, cache=FALSE}
DT
```
The first time you run this, the above will show a …
Run Code Online (Sandbox Code Playgroud)

caching r knitr data.table

19
推荐指数
2
解决办法
1154
查看次数

为什么我得到"position_dodge需要恒定宽度",即使ggplot2中的宽度是恒定的

我收到一条警告信息我不明白ggplot2中的简单条形图

> df <- data.frame(X = 127:131, Y = rnorm(5))
> df
    X          Y
1 127  0.9391077
2 128 -0.9392529
3 129 -1.1296221
4 130  1.1454907
5 131  1.8564596
> ggplot(df) + geom_bar(aes(X,Y), stat ="identity", position = "dodge")
Warning message:
position_dodge requires constant width: output may be incorrect 
Run Code Online (Sandbox Code Playgroud)

它似乎只发生在某些X值范围内.我已经用Google搜索了这方面的信息,但这一切似乎都在谈论宽度确实不同的情况,或者stat不是"身份"的情况.在这种情况下,X值只是整数,所以它应该很简单.

制作的图表看起来还不错,所以我对忽略一个我不理解的警告感到不安.

知道发生了什么事吗?

plot r ggplot2

18
推荐指数
1
解决办法
6663
查看次数

我应该如何从R data.table中删除NAs块

我有一个data.table带有多列密钥的大型R ,其中一些值列包含一些NA.我想在一个或多个值列中删除完全NA的组,但是保留整个组.对密钥的每一列重复此操作.

举一个简化的例子:

library(data.table)
DT = data.table(
    Series = rep(letters[1:12], each = 3), 
    Id = 1:12,
    Value1 = c(1:3, NA, 5:9, rep(NA,3), 1:3, NA, 5:9, rep(NA,3), 1:3, NA, 5:9, rep(NA,3)), 
    Value2 = c(rep(NA,3), 1:4, NA, 6:9, rep(NA,3), 1:9, 1:9, rep(NA,3)))
DT
    Series Id Value1 Value2
 1:      a  1      1     NA
 2:      a  2      2     NA
 3:      a  3      3     NA
 4:      b  4     NA      1
 5:      b  5      5      2
 6:      b  6      6      3
 7:      c  7 …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

为什么在分组data.table中使用lm更新丢失其模型数据?

好的,这是一个奇怪的.我怀疑这是一个内部的错误data.table,但是如果有人能够解释为什么会发生这种情况会有用 - 这究竟是update做什么的?

我正在使用list(list())里面的技巧data.table存储适合的模型.当您lm为不同的分组创建一系列对象,然后创建update这些模型时,所有模型的模型数据将成为最后一个分组的模型数据.这似乎是一个参考是挂在应该已经制作副本的地方,但我找不到哪里,我无法重现这个lmupdate.

具体例子:

从虹膜数据开始,首先使三种不同的样本大小,然后将lm模型拟合到每个物种,更新那些模型:

set.seed(3)
DT = data.table(iris)
DT = DT[rnorm(150) < 0.9]
fit = DT[, list(list(lm(Sepal.Length ~ Sepal.Width + Petal.Length))),
          by = Species]
fit2 = fit[, list(list(update(V1[[1]], ~.-Sepal.Length))), by = Species]
Run Code Online (Sandbox Code Playgroud)

原始数据表具有不同数量的每个物种

DT[,.N, by = Species]
#       Species  N
# 1:     setosa 41
# 2: versicolor 39
# 3:  virginica 42
Run Code Online (Sandbox Code Playgroud)

第一次证实了这一点:

fit[, nobs(V1[[1]]), by = Species]
#       Species …
Run Code Online (Sandbox Code Playgroud)

r lm data.table

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

标签 统计

r ×10

data.table ×6

knitr ×2

caching ×1

casting ×1

ggplot2 ×1

io ×1

lm ×1

na ×1

parallel-processing ×1

parsing ×1

plot ×1

regex ×1

string ×1

string-matching ×1