Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在函数中正确使用dcast.table.table_R_Data.table - Fatal编程技术网

R 在函数中正确使用dcast.table.table

R 在函数中正确使用dcast.table.table,r,data.table,R,Data.table,如何将dcast.data.table正确嵌入到函数中 我想写一个函数,其中使用dcast.data.table命令。函数应该做的一件事是将data.frame转换为data.table。在那之后,它应该对表进行dcast 以此数据帧为例: test <-data.frame(lett=c("a", "b", "c", "c", "d", "d", "e&quo

如何将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

您的函数有问题,它需要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)
}

我想我找到了解决问题的办法:

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)

你这样做到底节省了什么?您仍然需要键入数据集名称、LHS、RHS和value变量。要使其工作,您必须在函数中构造和计算公式。ddt我更正了上面的函数。只是忘记添加其他参数。*我喜欢@PeterK建议的答案,但我希望有一个独立于索引号的函数,这样可以灵活地提供列名。
myfunction(test,lett,group,perc)
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)
}
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