2016-04-29 54 views
0

我正在尝试自动填充数组/矩阵,其中计算出的数字是为我研究的每对Facebook页面计算的。我可以通过计算每对页面的数量来手动完成,然后填充数组。然而,我无法想象一个能够自动完成这个功能的功能。手动填充物的例子:通过计算生成的数字填充数组/矩阵

   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 

计算和手动填充:

RSL的样品

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 

我只想基本上改变所述一对中的“文件”,然后将所得在矩阵中的值。

我想是这样的:

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 

显然,是一个错误,但我不能让它工作,我想。谢谢你的帮助。

+0

我错了,认为你的for循环依赖于我和/或j的唯一值是输出位置?我假设你需要不同的输入变量给你的le函数,但是我没有看到发生了什么。我错过了什么吗? – rosscova

+0

你说得对,问题是我找不到如何做这项工作的方式。我是为循环中的每一次迭代使用不同的媒体对并计算它们的值。例如,a = media1,b = media2,计算并插入数组中。其次,a = media1,b = media3,计算并插入数组中等等。 – Dalibor

回答

0

我不知道你到底如何想从“媒体”中提取的变量添加到您的计算,但你需要参考这些值内的特定参考,例如:

media[i] 

而不是:

media[1] 

这样一来,“我”将循环在for循环中调用给(你的情况“SEQ(媒体)”所有可能的值,但我通常用“1 :长度(媒体)“我自己)。所以,对于“乐”线,你需要这样的东西:

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