通过计算生成的数字填充数组/矩阵
Posted
技术标签:
【中文标题】通过计算生成的数字填充数组/矩阵【英文标题】:Filling array / matrix by numbers generated from calculation 【发布时间】:2016-04-29 23:36:14 【问题描述】:我正在尝试使用为我研究的每对 Facebook 页面计算的数字自动填充数组/矩阵。我可以通过计算每对页面的数量来手动执行此操作,然后填充数组。但是,我想不出一个可以自动执行此操作的函数。手动填充示例:
rsl 示例:
from_id from_name x$likes[, 2]
56924 202099276507678 24.hu 1502184033424382
79551 202099276507678 24.hu 478120425722688
20007 202099276507678 24.hu 910595435726013
574961 543788999005363 ORIGO 918616121589753
172612 308921667047 168 Óra 1225006607529482
46408 131283758531 HVG 638659559622773
394136 114928525189230 Népszava Online 1021414547939024
20310 202099276507678 24.hu 861515480644047
167859 308921667047 168 Óra 2004057346485378
197230 224510837580985 mno.hu 10207173898839986
51713 202099276507678 24.hu 1094966453889403
342693 543788999005363 ORIGO 1065689316812793
413020 224510837580985 mno.hu 1158229737540788
267020 131059950261988 RTL Klub official 946100758842247
89410 560525343980775 Index.hu 815605101902725
294715 114324688634857 atv.hu 1152065254825682
132637 731815466835029 The Budapest Beacon 1125893650794568
389574 308921667047 168 Óra 954405207961450
928211 114324688634857 atv.hu 1116577471733852
118642 131283758531 HVG 1178121435555294
152663 543788999005363 ORIGO 690312584444943
29586 560525343980775 Index.hu 1768701566700483
2066110 248494883317 TV2 1031371220285102
657501 308921667047 168 Óra 1740704569476190
400491 560525343980775 Index.hu 1083676221692203
计算和手动填写:
media <- unique(rsl$from_name)
v<- matrix(nrow=length(media), ncol=length(media))
colnames(v) <- c(media)
rownames(v) <- c(media)
mf <- function(a, b)
ua <- rsl[rsl$from_name==a, "x$likes[, 2]"]
ub <- rsl[rsl$from_name==b, "x$likes[, 2]"]
pa <- length(ua)
pb <- length(ub)
pab <- length(intersect(ua,ub))
return(c(pa,pb,pab))
le <- mf(a=media[1], b=media[1])
M <- 2200000
NFD <- (max(log10(le[1]), log10(le[2])) - log10(le[3]))/(log10(M) - min(log10(le[1]), log10(le[2])))
v[1,1] <- NFD
我基本上只是更改“le”中的对,然后将结果值插入矩阵中。
我尝试过这样的事情:
v <- matrix(NA, nrow=length(media), ncol=length(media))
for (i in seq(media))
for (j in seq(media))
le <- mf(a=unique(media), b=unique(media))
NFD <- (max(log10(le[1]), log10(le[2])) - log10(le[3]))/(log10(M) - min(log10(le[1]), log10(le[2])))
v[i,j] <- NFD
v
显然,有一个错误,但我无法让它按我的意愿工作。感谢您的帮助。
【问题讨论】:
我认为 for 循环中依赖于 i 和/或 j 的唯一值是输出位置,我错了吗?我假设对于循环的每次运行,您都希望 le 函数有不同的输入变量,但我没有看到这种情况发生在哪里。我错过了什么吗? 你是对的,问题是我找不到如何让它工作的方法。我在循环中的每次迭代都使用不同的媒体对并计算它们的价值。比如a=media1, b=media2,计算并插入数组。二、a=media1,b=media3,计算插入到数组中等等。 【参考方案1】:我不确定您希望如何将从“媒体”中提取的变量添加到您的计算中,但您需要将这些值作为特定参考引用,例如:
media[i]
而不是:
media[1]
这样,“i”将循环遍历 for 循环调用中给出的所有可能值(在您的情况下为“seq(media)”,尽管我自己通常使用“1:length(media)”)。因此,对于“le”行,您需要类似以下内容:
le <- mf(a=media[i], b=media[j])
【讨论】:
以上是关于通过计算生成的数字填充数组/矩阵的主要内容,如果未能解决你的问题,请参考以下文章
程序 | java 随机生成10个数,填充一个数组并计算数组的和