嵌套for循环(或可能创建一个函数)

时间:2013-07-17 20:41:21

标签: r

我正在为探索性分析做一些非常基本的绘图,并且已成功创建了一个for循环来为我完成大部分工作。我有12年的数据,5个不同的类别(Cat1-Cat5)和3个不同的变量(Say X,Y,Z)。到目前为止,我所做的循环给出了每年变量的直方图(例如,第1年的X - 例如第12年的X)。

我以两种方式对数据进行分区 - 按类别划分,按年份划分如下:

Cat.1<-subset(data,Category==1) #Similar code for categories 2-5
categories<-list(Cat.1,Cat.2,Cat.3,Cat.4,Cat.5)

Year.1<-subset(data,Year==1)
years<-list(Year.1,Year.2, ... , Year.12)

现在,通过这种方式对数据进行分区,我设置了循环:

for(i in (1:length(categories))
{
  store.data<-categories[[i]]
  hist(store.data$X)
}

我想要做的是有一个处理3个变量的外部循环:

variables<-list(X,Y,Z)

for(j in (1:length(variables))
{
  #insert above for loop here
}

所需的输出将是每年和每个变量的所有直方图的输出。我意识到我可以在原始for循环中添加行:

 hist(store.data$Y)
 hist(store.data$Z)

但是,最终我将对数据运行分析(ANOVA,t-test等),并计划进行相同的设置。通过让外部循环处理内部循环所处理的变量,理论上我应该编写更少的代码。

1 个答案:

答案 0 :(得分:1)

这个简短的解决方案为您提供直方图,但没有命名它们以通知您哪个直方图与哪个类别相关。直方图将按变量命名,生成直方图的顺序将与您的类别的数字顺序相对应。看起来你在你发布的代码中标记了你的直方图,所以这对你来说可能不是问题。

category = rep(1:5,20)
X = rnorm(100)
Y = rexp(100)
Z = rgamma(100,5)

require(data.table)
DT = data.table(category, X, Y, Z)

DT[,lapply(.SD, hist), by=category]