通过计算生成的数字填充数组/矩阵

时间:2016-04-29 23:36:15

标签: arrays r loops matrix autofill

我正在尝试使用为我研究的每对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

显然,有一个错误,但我无法按照我的意愿去工作。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我不确定您希望如何将从“media”中提取的变量添加到计算中,但是您需要将这些值作为特定参考引用,例如:

media[i]

而不是:

media[1]

这样,“i”将循环遍历for循环调用中给出的所有可能值(在您的情况下为“seq(media)”,尽管我自己经常使用“1:length(media)”)。所以,对于“le”行,你需要类似的东西:

le <- mf(a=media[i], b=media[j])