R 从多维函数创建多个变量

R 从多维函数创建多个变量,r,data.table,R,Data.table,我想在j中使用=从给定函数创建多个变量 例如,从data.table DT=data.table(id=sample(10,100),v=runif(100)) 我想创造 # id p20 p80 # 1 0.12 0.92 # 2 0.02 0.83 现在,我知道了 DT[,list(p20=quantile(v,0.20),p80=quantile(v,0.80),by=id] 我不知道你的要求是否可以直接实现。这里有一个替代方案-围绕它编写一个函数-(这是我的快速和肮脏的代码

我想在
j
中使用
=
从给定函数创建多个变量

例如,从data.table

DT=data.table(id=sample(10,100),v=runif(100))
我想创造

# id  p20  p80
#  1 0.12 0.92
#  2 0.02 0.83
现在,我知道了

DT[,list(p20=quantile(v,0.20),p80=quantile(v,0.80),by=id]

我不知道你的要求是否可以直接实现。这里有一个替代方案-围绕它编写一个函数-(这是我的快速和肮脏的代码,给你一个想法)

DT您可以尝试“列表化”结果。比如:

DT[, as.list(quantile(v, c(0.2, 0.8))), by = id] 
如果要重命名新列,请执行以下操作:

setnames(DT, c("id", paste0("q", c(0.2, 0.8)))

谢谢然而,我寻找这样一种语法的原因之一是,调用一次
分位数(v,c(0.2,0.8))
必须比依次调用
分位数(v,0.2)
然后再调用
分位数(v,0.8)
,效率更高,不?你可能是对的,但一次调用更多分位数肯定要付出代价——即system.time分位数(v,c(0.2,0.8))大于系统时间(分位数(v,c(0.2))数据
setnames(DT, c("id", paste0("q", c(0.2, 0.8)))