R常用函数(data.table、并行函数)使用技巧

本文介绍了R语言中lapply、mapply和Map的使用技巧,特别是如何处理不同长度的数据.table列和批量转换列类。还提到了data.frame转化为matrix的注意事项,以及筛选日期、创建因子变量、制造列联表和计算百分位数的便捷方法。此外,文章探讨了expression、rleid函数和str_split等字符串处理函数的实用功能。
摘要由CSDN通过智能技术生成
  1. lapply 可自外部传递参数
lapply(DT[-1], quantile, probs = 1:3/4)
#probs可在function后面作为参数传递

do.call(rbind,lapply(range_split,`length<-`,max(lengths(range_split))))
#通过传递参数进行补齐
  1. 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

  1. 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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值