簡體   English   中英

如何在 R 中創建一個數據框(不使用嵌套的 for 循環),它記錄來自其他向量的估計?

[英]How to create a data frame in R (without using nested for loops), which records estimations from other vectors?

我想存儲兩個 2D 軌跡的每個點 (x,y) 之間的距離。 所以我有 4 個向量: axay具有粒子 a 和bx的時間相關坐標by對於粒子 b。 我想創建一個數據框dist基本上是:

dist[t1,t2] = sqrt((ax[t1]-bx[t2])**2+(ay[t1]-by[t2])**2)

現在我想在不使用t1t2的嵌套 for 循環的情況下執行此操作,因為tmax~1000將花費大量時間。 是否有任何很酷的數據框技巧或任何apply方法來實現這一點?

首先,讓我們使數據可重現。 您應該在下一個問題中自己這樣做。

ax <- 1:3
ay <- 4:6
bx <- 3:1
by <- 6:4

R 被矢量化,您不需要在語句中包含索引。

dist <- sqrt((ax-bx)^2+(ay-by)^2)
result <- data.frame(ax, ay, bx, by, dist)
> result
  ax ay bx by     dist
1  1  4  3  6 2.828427
2  2  5  2  5 0.000000
3  3  6  1  4 2.828427

outer函數對此很有用,您可以這樣做:

outer(seq_along(ax), seq_along(bx), 
function(t1,t2){sqrt((ax[t1]-bx[t2])**2+(ay[t1]-by[t2])**2)})

我對你的計算做了一點改動: bx[t1]變成了bx[t2] ,我認為這是正確的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM