我试图计算R中长度为10605的向量中所有点之间的差异。例如,我正在尝试这样做:
for (i in 1:10605){
for (j in 1:10605){
differences[i] = housedata$Mean_household_income[i] - housedata$Mean_household_income[j]
}
}
计算需要很长时间,而且我认为这是一种更及时的方法来计算此向量中所有点之间的差异。有没有人有任何建议?
谢谢!
答案 0 :(得分:1)
似乎dist
函数应该这样做。距离矩阵只是下三角形,因为distance(x,y) == distance(y,x)
:
my.distances <- dist(housedata$Mean_household_income,
housedata$Mean_household_income)
它会更快,因为它在C代码中完成。只需输入:
dist
答案 1 :(得分:0)
您可以遍历向量的递增移位/包裹副本并减去两个向量。你仍然需要遍历数据的长度一次,每次移动和减去向量,但它可能会节省一些时间。
以下是一个例子:
# make a shift/wrap function
shift <- function(df,offset){
df[((1:length(df))-1-offset)%%length(df)+1]
}
# make some data
data <- seq(1,4)
# make an empty vector to hold the data
difs = vector()
# loop through the data
for(i in 1:length(data)){
shifted <- shift(data,i)
result <- data - shifted
difs <- c(difs, result)
}
print(difs)
答案 2 :(得分:0)
使用outer
怎么样?它在两个向量的所有组合上使用向量化函数(此处为-
),并将结果存储在矩阵中。
例如,
x <- runif(10605)
system.time(
differences <- outer(x, x, '-')
)
在我的电脑上花了一秒钟。