R:解包一个函数,该函数将多个对象返回到数据帧的多个列

R:解包一个函数,该函数将多个对象返回到数据帧的多个列,r,R,希望我能解释一下这个问题: 我有一个如下形式的函数,它返回两个感兴趣的值 return_network <- function(team_id){ ... [ do something to produce adjacency matrix and network density measures] g <- graph.adjacency(co_occur, weighted=TRUE, mode ='undirected') g <- simplify(g

希望我能解释一下这个问题:

我有一个如下形式的函数,它返回两个感兴趣的值

return_network <- function(team_id){
   ... [ do something to produce adjacency matrix and network density measures] 

  g <- graph.adjacency(co_occur, weighted=TRUE, mode ='undirected')
  g <- simplify(g)

  return(c(weighted_network_density, g))

return\u network这里有一个问题的猜测:
apply
中每一步的输出都绑定为列,即使在对行应用时也是如此,因此结果会按照(至少是我)预期的方式进行转换。我下面的简单示例不会再现您的错误,因为它会导致错误,因此如果我们有此data.frame:

df <- data.frame(dog = c(1,2,3), cat = c(4,5,6), fish = c(7,8,9))
df
  dog cat fish
1   1   4    7
2   2   5    8
3   3   6    9
如果我们把它作为一个矩阵,我们可以将它传递到一个数据帧的两列中,而不会出现错误消息,但它会以一种奇怪的方式强制它,从而产生一个无意义的结果:

df2 <- df
df2[,c('cat', 'fish')] <- apply(df, 1, function(x) c(x['dog'], x['cat']))
df2
  dog cat fish
1   1   1    5
2   2   4    3
3   3   2    6

df2这里有一个问题的猜测:
apply
中每一步的输出都被绑定为列,即使在对行进行应用时也是如此,因此结果与(至少我)预期的方式不同。我下面的简单示例不会再现您的错误,因为它会导致错误,因此如果我们有此data.frame:

df <- data.frame(dog = c(1,2,3), cat = c(4,5,6), fish = c(7,8,9))
df
  dog cat fish
1   1   4    7
2   2   5    8
3   3   6    9
如果我们把它作为一个矩阵,我们可以将它传递到一个数据帧的两列中,而不会出现错误消息,但它会以一种奇怪的方式强制它,从而产生一个无意义的结果:

df2 <- df
df2[,c('cat', 'fish')] <- apply(df, 1, function(x) c(x['dog'], x['cat']))
df2
  dog cat fish
1   1   1    5
2   2   4    3
3   3   2    6

df2什么是
加权网络密度
g
?这些是复杂的物体还是数字?您还需要小心使用
c()
,因为它可能会以意外的方式强制执行加权网络密度只是一个数值。g是igraph库中的图形对象。我将每个图形对象存储在一行数据帧中(也许这是一种糟糕的形式,但我想不出另一种方法),以便以后可以从该对象计算相关的网络度量。什么是
weighted\u network\u density
g
?这些是复杂的物体还是数字?您还需要小心使用
c()
,因为它可能会以意外的方式强制执行加权网络密度只是一个数值。g是igraph库中的图形对象。我将每个图形对象存储在数据帧的一行中(也许这是一种糟糕的形式,但我想不出另一种方法),以便以后可以从该对象计算相关的网络度量。
df2 <- df
df2[,c('cat', 'fish')] <- apply(df, 1, function(x) c(x['dog'], x['cat']))
df2
  dog cat fish
1   1   1    5
2   2   4    3
3   3   2    6
df2[,c('cat', 'fish')] <- as.data.frame(apply(df, 1, function(x) c(x['dog'], x['cat'])))
Error in `[<-.data.frame`(`*tmp*`, , c("cat", "fish"), value = list(V1 = c(1,  : 
  replacement element 1 has 2 rows, need 3
df2[,c('cat', 'fish')] <- as.data.frame(t(apply(df, 1, function(x) c(x['dog'], x['cat']))))
df2
  dog cat fish
1   1   1    4
2   2   2    5
3   3   3    6