我尝试计算R中不同组的列均值。有几种方法可以分配组,因此创建的两列包含不同的分组。
# create a test df
df.abcd.2<-data.frame(Grouping1=c("a","f","a","d","d","f","a"),Grouping2=c("y","y","z","z","x","x","q"),Var1=sample(1:7),Var2=sample(1:7),Var3=rnorm(1:7))
df.abcd.2
现在我创建了一个带有assign,lapply,split和colMeans的循环来获取我的结果并存储在不同的dfs中。循环工作正常。
#Loop to create the colmeans and store them in dataframes
for (i in 1:2){
nam <- paste("RRRRRR",deparse(i), sep=".")
assign(nam, as.data.frame(
lapply(
split(df.abcd.2[,3:5], df.abcd.2[,i]), colMeans)
)
)
}
所以现在我想创建一个函数来在不同的数据帧上应用这个方法。我的尝试看起来像这样:
# 1. function to calculate colMeans for diffrent groups
# df= desired datatframe,
# a=starting column: beginning of the columns that contain the groups, b= end of columns that contain the groups
# c=startinc column: beginning of columns to be analized, d=end of columns do be analized
function.split.colMeans<-function(df,a,b,c,d)
{for (i in a:b){
nam <- paste("OOOOO",deparse(i), sep=".")
assign(nam, as.data.frame(
lapply(
split(df[,c:d], df[,i]), colMeans)
)
)
}
}
#test the function
function.split.colMeans(df.abcd.2,1,2,3,5)
因此,当我测试此功能时,我既没有收到错误信息也没有结果......有人可以帮帮我吗?
答案 0 :(得分:1)
它完美运作。阅读分配帮助。了解框架和环境。
换句话说,它在您的函数中创建变量,但是当您在命令行执行ls()
时,它们不会泄漏到您看到的环境中。如果你将print(ls())
放在你的函数循环中,你会看到它们,但是当函数结束时它们会消失。
通常,函数与其调用环境交互的唯一方法是返回值。任何其他方法都会进入一个痛苦的世界。
不要使用assign来创建具有顺序或信息名称的东西。永远。除非你知道自己在做什么,否则不要把它们粘贴在列表中,然后你可以将这些部分编入索引以便循环等等。