【发布时间】:2014-04-22 05:06:55
【问题描述】:
我有一个包含 n 个变量的矩阵,我想创建一个新矩阵,它是每个向量的成对差异,但不是自身。以下是数据示例。
Transportation.services Recreational.goods.and.vehicles Recreation.services Other.services
2.958003 -0.25983789 5.526694 2.8912009
2.857370 -0.03425164 5.312857 2.9698044
2.352275 0.30536569 4.596742 2.9190123
2.093233 0.65920773 4.192716 3.2567390
1.991406 0.92246531 3.963058 3.6298314
2.065791 1.06120930 3.692287 3.4422340
我尝试在下面运行一个 for 循环,但我知道 R 的循环非常慢。
Difference.Matrix<- function(data){
n<-2
new.cols="New Columns"
list = list()
for (i in 1:ncol(data)){
for (j in n:ncol(data)){
name <- paste("diff",i,j,data[,i],data[,j],sep=".")
new<- data[,i]-data[,j]
list[[new.cols]]<-c(name)
data<-merge(data,new)
}
n= n+1
}
results<-list(data=data)
return(results)
}
正如我之前所说,代码运行速度非常慢,甚至还没有完成一次运行。我也为初学者级别的编码道歉。另外我知道这段代码将原始数据保留在矩阵上,但我可以稍后将其删除。
我可以对这些数据使用 apply 函数或 foreach 吗?
【问题讨论】:
-
不需要任何循环。你的答案在这里:stat.ethz.ch/pipermail/r-help/2004-August/055324.html
标签: r for-loop matrix foreach apply