在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中的东西做了一些更复杂的事情,如最简单的例子所示。这让我开始。。。谢谢