是否可以“通过引用”为对象创建名称并为其指定名称? 例如,我有一个大型的data.frame,我需要对其中的一些列进行一些基本操作。我在列表中列出了我需要做的列,分组和操作:
exec_group_list = c("nbhd", "state", "use")
exec_var_list = c("land", "imp", "assmt", "landp", "impp", "assmtp")
exec_func_list = c("sum", "mean", "median", "max", "min", "sd")
因此,“land”列将按“nbhd”分组,然后将“sum”,“mean”,“median”等应用于它。然后对“imp”列进行同样的操作,依此类推。然后我会重复相同但这次分组将通过“状态”进行...冲洗,车床和重复,如下:
for (eachg in exec_group_list){
group_by_field = eachg
group_by = eval(parse(text=paste("sales$",group_by_field)))
group_by_lst = list(group_by)
print(paste("Grouping by:", eachg))
#CREATE DATA.FRAME FOR GROUP HERE
for (eachv in exec_var_list){
var = eval(parse(text=paste("sales$",eachv)))
print(paste("On column:", eachv))
for (eachf in exec_func_list){
print(paste("Calculating:", eachf))
tempt = (aggregate(var, group_by_lst, eachf))
colnames(tempt) = c(eachg, paste(eachv,".",eachf, sep=""))
print(tempt)
#APPEND COLUMNS TO GROUP DATA.FRAME
}
}
}
我想出了如何使用eval()来使用列表中的引用,这样我就可以通过分组列表和列列表进行循环,并使用列表中的值执行相同的操作。
但我想将信息存储在以分组字段命名的data.frame中。例如,如果我按“nbhd”进行分组,我想创建一个名为“by_nbhd”的空数据框。
我尝试过与eval(parse(text=paste("by_","nbhd", sep=""))) = data.frame("nbhd"=NA)
类似的内容,但收到错误。
任何人都知道这是否可行?任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
不是要求“通过引用创建一个对象”,而是通过“按值调用”与“通过引用调用”之间的区别来提出各种无关的认知关联,而应该寻求“on /用语言“。大概你有一个数据集(你没有很好地描述),有一组名为“”nbhd“,”state“和”use“的列,还有名为”land“,”imp“,”assmt“的列。 ,“landp”,“impp”,“assmtp”。您想要在第二组的数字列(3 x 6 x 6表)上连续检查第一组的6个类别中的6种排序的摘要统计数据。
编写函数原型,为特定函数,特定数字列和特定分类列提供一个汇总表。
tabfn <- function(dfrm, numcol, catcol, fn){
tapply(dfrm[[numcol]], dfrm[[catcol]], fn) }
最简单的方法是创建一流的函数列表,而不是eval(parsing(text=character-objects)
exec_func_list = list(sum, mean, median, max, min, sd)
for (eachg in exec_group_list){
print(paste("Grouping by:", eachg))
for (eachv in exec_var_list){
print(paste("On column:", eachv))
for (eachfn in exec_func_list){
print(paste("Calculating:", eachf))
print(tabfn(dfrm, exec_var_list, exec_group_list, eachfn)
}
}
}
不幸的是,这主要是未经测试的猜测,因为你没有产生一个可重复性最小的例子。