R 使用依赖于data.table行类型的函数计算幅值

R 使用依赖于data.table行类型的函数计算幅值,r,data.table,R,Data.table,我想计算一个大小,它取决于数据表行的类型: library (data.table) n1 <- c(1,2,3) n2 <- c(10,20,30,40) num <- list(n1,n2) type <- c("price", "volume") dt1 <- data.table (num, type) dt1 [, cons.fun := "sum"] dt1[type=="price", cons.fun := "mean"] > dt1

我想计算一个大小,它取决于数据表行的类型:

library (data.table)

n1 <- c(1,2,3)
n2 <- c(10,20,30,40)
num <- list(n1,n2)
type <- c("price", "volume") 
dt1 <- data.table (num, type)
dt1 [, cons.fun := "sum"]
dt1[type=="price", cons.fun := "mean"]

> dt1
           num   type cons.fun
1:       1,2,3  price     mean
2: 10,20,30,40 volume      sum
而不是预期的:

> dt1
           num   type cons.fun magnitude
1:       1,2,3  price     mean         2
2: 10,20,30,40 volume      sum       100

我怎样才能把它做好?谢谢大家!

这里有一种方法。循环遍历行,
获取字符串的值,并在“num”列上应用函数

dt1[, magnitude := get(cons.fun)(num[[1]]), 1:nrow(dt1)]
dt1
#          num   type cons.fun magnitude
#1:       1,2,3  price     mean         2
#2: 10,20,30,40 volume      sum       100

或者,由于OP使用的是
match.fun
,“cons.fun”可以与
mappy
循环,以提取函数对象并将函数应用于相应的
列表
列“num”

dt1[, magnitude := mapply(function(x, y) match.fun(x)(y), cons.fun, num)]

亲爱的@akrun,我在data.table语法中找不到第三个参数
1:nrow(dt1)
的推理。A好的,它应该在
by=
on=
等前面。它到底是做什么的?谢谢。@fabiocorea这里的
1:nrow(dt1)
是用于
by
参数的,即我们是按行分组的
dt1[, magnitude := mapply(function(x, y) match.fun(x)(y), cons.fun, num)]