如何将dcast.data.table()正确嵌入到函数中?
我想编写一个使用(除此之外)dcast.data.table()命令的函数。该函数应该做的一件事是将data.frame转换为data.table。在那之后,它应该dcast表。
以此数据框为例:
test <-data.frame(lett=c("a", "b", "c", "c", "d", "d", "e"),
group=c(1,1,1,3,3,4,4),
perc=sample(1:100,7))
lett group perc
1 a 1 71
2 b 1 87
3 c 1 36
4 c 3 39
5 d 3 4
6 d 4 20
7 e 4 16
如果没有嵌入到函数中,dcast.data.table工作正常:
test.dt <- setDT(as.list(test))
dcast.data.table(test.dt, lett~group, var.value="perc")
Using 'perc' as value column. Use 'value.var' to override
lett 1 3 4
1: a 71 NA NA
2: b 87 NA NA
3: c 36 39 NA
4: d NA 4 20
5: e NA NA 16
但是当我在函数中嵌入setDT(as.list())和dcast.data.table时,我收到错误“dcast.data.table中的错误......未找到列'y'。” / p>
myfunction <- function(d, y, z,v)
{d <- setDT(as.list(d))
temp <- dcast.data.table(d, y~z,
value.var=v)
return(temp)}
myfunction(test)
任何提示都将不胜感激。
我以前的命令有错误(我忘了添加其余的参数)。我打算写这个:
myfunction(test,lett,group,perc)
答案 0 :(得分:0)
你的函数有问题,需要4个参数,但你只用一个参数调用它。 但是,此功能将起作用。
myfunction <- function(d) {
d <- setDT(as.list(d))
formula <- as.formula(paste(names(d)[1],"~",names(d)[2]))
temp <- dcast.data.table(d, formula ,value.var=names(d)[3])
return(temp)
}
答案 1 :(得分:0)
我想我找到了解决问题的方法:
myfunction <- function(d=NULL, y,z,v)
{y<-eval(substitute(y),d, parent.frame())
z<-eval(substitute(z),d, parent.frame())
v<-eval(substitute(v),d, parent.frame())
d.temp <- data.table(y=y,z=z,v=v)
temp <- dcast.data.table(d.temp, y~z,
value.var="v")
return(temp)
}
myfunction(test, lett, group, perc)
返回所需的输出:
y 1 3 4
1: a 14 NA NA
2: b 97 NA NA
3: c 93 9 NA
4: d NA 67 86
5: e NA NA 72