如何在data.table中运行一个函数?

ska*_*kan 6 r grepl 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
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码

patt <-  "^\\d\\d?/\\d\\d?/\\d{4}$" 
sapply(my, function(x)   (grepl(patt,x )))
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

my[,lapply(.SD, grepl, patt)]
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

   AA    BB    CC    DD    EE
1: NA FALSE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

为什么?如何在括号内写出相同的结果?

akr*_*run 8

pattern如果我们不使用匿名函数调用,我们需要指定参数

my[,lapply(.SD, grepl, pattern = patt)]
Run Code Online (Sandbox Code Playgroud)

或者使用匿名函数调用

my[,lapply(.SD, function(x) grepl(patt, x))]
Run Code Online (Sandbox Code Playgroud)