繁体   English   中英

使用R apply在数据帧的特定列上运行函数

[英]using R apply to run a function on specific columns of a dataframe

我有这个函数返回边缘权重(如何在这种情况下使用apply函数不应该需要任何igraph库的知识)给定图形对象igraph_obj(其中权重在计算后存储)的图形上的链接node1和node2(存储在数据帧df中):

dweight <- function(igraph_obj, node1, node2){
    return(E(igraph_obj)[node1 %->% node2]$weight)
}

我想在具有这种结构的数据帧上应用此函数:

Node1 Node2 other_column1 other_column2 ...
a     b        1                2       ...
c     d        3                7       ...
...

我已经阅读了关于apply函数的文档和教程,到目前为止我所尝试的还没有将函数dweight应用到每个node1,node2等上。如果我必须写一个循环来做它,它会做这样的事情:df的每一行的dweight(igraph_obj = g,df $ Node1 [i],df $ Node2 [i])。

因此,apply函数看起来像这样:

apply(df, 1, dweight, igraph_obj=g) 

但是,dweight不知道哪个df列用作node1,node2。 这也不起作用:

apply(df, 1, dweight, igraph_obj=g, node1 = df$Node1, node2 = df$Node1)

尝试:

  mapply(dweight, node1=df$Node1, node2=df$Node2, MoreArgs=list(igraph_obj=g))

这应该有效,但我现在无法测试。 如果没有,请尝试:

  mapply(function(n1, n2) dweight(igraph_obj=g, n1, n2), df$Node1, df$Node2)

或者,如果您想稍微修改您的功能:

dweight <- function(nodes, igraph_obj){
    node1 <- nodes$Node1
    node2 <- nodes$Node2
    return(E(igraph_obj)[node1 %->% node2]$weight)
}

然后您可以在第一次尝试时使用您的应用功能:

 apply(df, 1, dweight, igraph_obj=g) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM