【发布时间】:2016-12-24 10:07:52
【问题描述】:
我有 data.frame 列表作为我的自定义函数的输入,我希望自定义函数返回多个 data.frame 列表。我对我的函数做了一些代码更改,但它返回了意外的输出。谁能建议我如何改进自定义函数中的代码?我的代码哪里出错了?有什么提示吗?
数据
myList <- list(
foo = data.frame( start=seq(1, by=4, len=6), stop=seq(3, by=4, len=6)),
bar = data.frame(start=seq(5, by=2, len=7), stop=seq(7, by=2, len=7)),
bleh = data.frame(start=seq(1, by=5, len=5), stop=seq(3, by=5, len=5))
)
自定义功能需要优化:
func <- function(set) {
# check input param
stopifnot(is.list(set))
output <- list()
require(dplyr)
for(id in 1: seq_along(set)) {
entry <- set[[id]]
self_ <- setdiff(entry, entry)
res <- lapply(set[-id], function(ele_) {
joined_ <- setdiff(entry, ele_)
})
ans <- c(list(self_), res)
names(ans) <- c(names(set[id]),names(set[-id]))
output[id] <- ans
}
return(output)
}
想要的输出
我希望我的自定义函数会返回多个 data.frame 对象列表。谁能给我一些想法?谢谢
【问题讨论】:
-
func究竟应该做什么?暂时不要管它的输出格式;您要对输入执行什么计算? -
“总是用列表很无聊”???你这是什么意思?列表有效且灵活。如果这会让你更快乐,你可以给他们起有趣的名字。 “R 中的哪个 data.structure 更适合存储非常大的多个 data.frame 列表” 在基础 R 中,有两种结构可以在其中包含数据框列表:列表和环境。除了无聊,您在使用列表时还有哪些问题?
-
您的示例不可重现。 “改进的”功能似乎没有做任何事情。我的回答解决了您原始示例的意图。我不能给你比这更具体的答案,因为你的例子是不够的。我们无法读懂你的想法。
-
我在执行上错了。
标签: r loops functional-programming