如何 运行 data.table 中的函数?
How to run a function inside data.table?
我创建了一个例子data.table
library(data.table)
set.seed(1)
siz <- 10
my <- data.table(
AA=c(rep(NA,siz-1),"11/11/2001"),
BB=sample(c("wrong", "11/11/2001"),siz, prob=c(1000000,1), replace=T),
CC=sample(siz),
DD=rep("11/11/2001",siz),
EE=rep("HELLO", siz)
)
my[2,AA:=1]
NA wrong 3 11/11/2001 HELLO
1 wrong 2 11/11/2001 HELLO
NA wrong 6 11/11/2001 HELLO
NA wrong 10 11/11/2001 HELLO
NA wrong 5 11/11/2001 HELLO
NA wrong 7 11/11/2001 HELLO
NA wrong 8 11/11/2001 HELLO
NA wrong 4 11/11/2001 HELLO
NA wrong 1 11/11/2001 HELLO
11/11/2001 wrong 9 11/11/2001 HELLO
如果我运行这个代码
patt <- "^\d\d?/\d\d?/\d{4}$"
sapply(my, function(x) (grepl(patt,x )))
只要有约会,我就会得到 table 和 TRUE
。
AA BB CC DD EE
[1,] FALSE FALSE FALSE TRUE FALSE
[2,] FALSE FALSE FALSE TRUE FALSE
[3,] FALSE FALSE FALSE TRUE FALSE
[4,] FALSE FALSE FALSE TRUE FALSE
[5,] FALSE FALSE FALSE TRUE FALSE
[6,] FALSE FALSE FALSE TRUE FALSE
[7,] FALSE FALSE FALSE TRUE FALSE
[8,] FALSE FALSE FALSE TRUE FALSE
[9,] FALSE FALSE FALSE TRUE FALSE
[10,] TRUE FALSE FALSE TRUE FALSE
但是如果我这样做的话:
my[,lapply(.SD, grepl, patt)]
我刚得到这个结果:
AA BB CC DD EE
1: NA FALSE FALSE FALSE FALSE
为什么?
我怎样才能得到相同的结果,将所有内容都写在括号内?
如果我们不使用匿名函数调用,我们需要指定 pattern
参数
my[,lapply(.SD, grepl, pattern = patt)]
或者使用匿名函数调用
my[,lapply(.SD, function(x) grepl(patt, x))]
我创建了一个例子data.table
library(data.table)
set.seed(1)
siz <- 10
my <- data.table(
AA=c(rep(NA,siz-1),"11/11/2001"),
BB=sample(c("wrong", "11/11/2001"),siz, prob=c(1000000,1), replace=T),
CC=sample(siz),
DD=rep("11/11/2001",siz),
EE=rep("HELLO", siz)
)
my[2,AA:=1]
NA wrong 3 11/11/2001 HELLO
1 wrong 2 11/11/2001 HELLO
NA wrong 6 11/11/2001 HELLO
NA wrong 10 11/11/2001 HELLO
NA wrong 5 11/11/2001 HELLO
NA wrong 7 11/11/2001 HELLO
NA wrong 8 11/11/2001 HELLO
NA wrong 4 11/11/2001 HELLO
NA wrong 1 11/11/2001 HELLO
11/11/2001 wrong 9 11/11/2001 HELLO
如果我运行这个代码
patt <- "^\d\d?/\d\d?/\d{4}$"
sapply(my, function(x) (grepl(patt,x )))
只要有约会,我就会得到 table 和 TRUE
。
AA BB CC DD EE
[1,] FALSE FALSE FALSE TRUE FALSE
[2,] FALSE FALSE FALSE TRUE FALSE
[3,] FALSE FALSE FALSE TRUE FALSE
[4,] FALSE FALSE FALSE TRUE FALSE
[5,] FALSE FALSE FALSE TRUE FALSE
[6,] FALSE FALSE FALSE TRUE FALSE
[7,] FALSE FALSE FALSE TRUE FALSE
[8,] FALSE FALSE FALSE TRUE FALSE
[9,] FALSE FALSE FALSE TRUE FALSE
[10,] TRUE FALSE FALSE TRUE FALSE
但是如果我这样做的话:
my[,lapply(.SD, grepl, patt)]
我刚得到这个结果:
AA BB CC DD EE
1: NA FALSE FALSE FALSE FALSE
为什么? 我怎样才能得到相同的结果,将所有内容都写在括号内?
如果我们不使用匿名函数调用,我们需要指定 pattern
参数
my[,lapply(.SD, grepl, pattern = patt)]
或者使用匿名函数调用
my[,lapply(.SD, function(x) grepl(patt, x))]