- lapply 可自外部传递参数
lapply(DT[-1], quantile, probs = 1:3/4)
#probs可在function后面作为参数传递
do.call(rbind,lapply(range_split,`length<-`,max(lengths(range_split))))
#通过传递参数进行补齐
- mapply和Map可传递多个参数
mapply(function(x, i) paste(i, x), x, names(x))
# a b c
#"a 11" "b 12" "c 13"```
x <- list(a=11, b=12, c=13)
> Map(function(x, i) paste(i, x), x, names(x))
#$a
#[1] "a 11"
#$b
#[1] "b 12"
#$c
#[1] "c 13
注意:mapply和Map的差异:
When using mapply(), notice the SIMPLIFY option, which defaults to true. In my case, that made the whole thing into a large matrix when I only wanted to a simple list apply. Setting it to F (inside the mapply()) made it run as intended。
若返回的每个data.table列数不一样,则不会simplify
- data table列class 批量转换
这个写法真的绝了。如果只是X[,names(X)[grepl(“f”,names(x))]] 会把j位置上当做函数,是返回不了data table的subset的。但不知道为什么赋值又是可以的。反正就是可以就是了。
myvab <- names(X)[grepl("f",names(X))]
X[,myvab] <- X[,lapply(.SD,as.factor),.SDcols=myvab]
str(X)
#不用定义myvab也可以
#其他错误的写法:
X[,names(X)[grepl("f",names(X))