[英]Apply function to list of data frames in R
我有一個數據框列表,每個數據框都有一個帶有 3 維向量(3 列)的行。 我想計算每個數據幀中每對后續行的余弦相似度(lsa::cosine)(例如,第 1 行和第 2 行、第 2 行和第 3 行、第 3 行和第 4 行等)。 如何遍歷列表中的每個數據幀以計算后續行的余弦相似度,同時保持每個數據幀的余弦值分開?
以下是一些用於重現性目的的簡單假數據:
df1 = data.frame(y1 = c(1,2,3,4,5), y2 = c(2,3,4,5,6), y3 = c(5,4,3,2,1))
df2 = data.frame(y1 = c(6,7,8,9,10), y2 = c(6,5,4,3,2), y3 = c(1,3,5,7,9))
dflist = list(df1, df2)
提前致謝!
我們可能會使用lapply/sapply
library(lsa)
sapply(dflist, function(x) mapply(function(u, v)
c(cosine(as.vector(u), as.vector(v))),
asplit(x[-nrow(x), ], 1), asplit(x[-1, ], 1)))
[,1] [,2]
1 0.9492889 0.9635201
2 0.9553946 0.9747824
3 0.9714890 0.9850197
4 0.9844672 0.9915254
如果您的t
/matrices 不大,您可以轉置每一個,計算每行之間的相似性,然后將返回的矩陣的第一個非對角線子集化以僅比較后續行:
library(lsa)
lapply(dflist, \(x) {
m <- cosine(as.matrix(t(x)))
m[(col(m)-row(m)) == 1]
})
#[[1]]
#[1] 0.9492889 0.9553946 0.9714890 0.9844672
#
#[[2]]
#[1] 0.9635201 0.9747824 0.9850197 0.9915254
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.