在R中:从apply返回一个数据帧,以迭代方式构造data.frame

在R中:从apply返回一个数据帧,以迭代方式构造data.frame,r,R,一个例子最能说明我需要做什么: # dd is a list and has some vars dd = list() dd$var = "some data is in here" # now I want to add a sub data frame $new dd$new = apply(as.array(seq(1,5)), 1, function(x){ return( data.frame( a = x, b = x * 2 )) }) str(d

一个例子最能说明我需要做什么:

# dd is a list and has some vars
dd = list()
dd$var = "some data is in here"

# now I want to add a sub data frame $new
dd$new = apply(as.array(seq(1,5)), 1, function(x){

  return( data.frame(
    a = x,
    b = x * 2
  ))

})

str(dd)

# desired structure #######################

#List of 2
# $ var: chr "some data is in here"
# $ new:List of 2
#  ..$ a: num [1:5] 1 2 3 4 5
#  ..$ b: num [1:5] 2 4 6 8 10

#### Note: this is NOT what str(dd) actually gives, but what I want dd to look like!
我怎样才能做到这一点

编辑 根据标记为正确的答案,我可以解决它:

# dd is a list and has some vars
dd = list()
dd$var = "some data is in here"

# now I want to add a sub data frame $new
ret = apply(as.array(seq(1,5)), 1, function(x){

  return( data.frame(
    a = x,
    b = x * 2
  ))

})    

dd$new = as.list(do.call(rbind, ret))

str(dd)
#List of 2
# $ var: chr "some data is in here"
# $ new:List of 2
#  ..$ a: int [1:5] 1 2 3 4 5
#  ..$ b: num [1:5] 2 4 6 8 10
而且 根本没有理由否决我的问题。该规范的注释中说明了该问题。该代码是一个有效的示例。我说出了想要的答案。如果你不费心阅读代码,那么,至少不要投反对票

我们可以试试

res <- setNames(list(dd[[1]], as.list(do.call(rbind, dd$new))), names(dd))

这与您提供的信息相同

dd = list()
dd$var = "some data is in here"

dd$new <- list(a = 1:5, b = (1:5)*2)
str(dd)

当然但是apply FUN中的东西做了一些更复杂的事情,如最简单的例子所示。这让我开始。。。谢谢