【发布时间】:2014-06-07 10:39:21
【问题描述】:
我在理解如何创建一个用户定义的函数时遇到一个普遍的问题,该函数可以接受变量作为可以在定义的函数内部进行操作的参数。我想创建一个函数,我可以在其中将变量作为参数传递给内部函数进行操作。看来我想使用的许多函数都需要 c() 运算符,它需要在参数周围加上引号。
所以我的函数必须能够将变量的名称从数据框中传递到 c() 的引号和其他需要引号字符串的函数中。我阅读了很多关于paste0、paste 和cat(x) 的帖子,但我不知道如何完全解决我的问题。
这里有一个简单的数据集和缩短的代码来帮助构建问题。在这里,我只想能够提供一个数据框和三个变量。该函数应为x 和z 变量的每个组合提供变量在y 位置的平均值。生成的聚合表应该具有作为参数提供给 XTABAR 作为列标题的变量名称。
n=50
DataTest = data.frame( xcol=sample(1:3, n, replace=TRUE), ycol = rnorm(n, 5, 2), Catg=letters[1:5])
XTABAR<- function(DS,xcat,yvar,group){
library(plyr)
#library(ggplot2)
#library(dplyr)
#library(scales)
localenv<-environment()
gg<-data.frame(DS,x=DS[,xcat],y=DS[,yvar],z=DS[,group] )
cnames<-colnames(gg)
ag.gg<-aggregate(gg$y, by=list(gg$x,gg$z),FUN=mean)
colnames(ag.gg)<-c(cat('"',cnames[1],'"'),cat('"',cnames[2],'"'),cat('"',cnames[3],'"'))
return(ag.gg)
}
XTABAR(DataTest,"xcol","ycol","Catg")
这段代码尽可能接近解决简单问题。我不知道如何从列名中删除引号,也不知道如何摆脱 NA。
感谢您对逻辑和/或代码的任何帮助。
【问题讨论】:
-
如果不进一步研究这个函数的作用 -
colnames(ag.gg)<-c(xcat, yvar, group)呢? -
lukeA,你解决了我的临时问题,谢谢。我是stackoverflow的新手。我如何给你信用?
-
那么欢迎来到 SO。 :) 投票柜台旁边有一个复选标记。如果您找到您喜欢的解决方案,您可以通过单击复选标记来接受它作为答案。 PS:阅读stackoverflow.com/questions/5963269/…提供好的例子并获得更多答案。
标签: r user-defined-functions paste cat