r - 在 R 中,有没有办法循环遍历函数并将所有输出绑定到 1 个数据帧中?
问题描述
我有一个函数定义为:
Bestideas <- function(x) {
Top_five = subset(Masterall, Masterall$Name == x) %>% slice(1:5)
return(as.data.frame(Top_five))
}
然后,我想要一个包含给定列表中每个名称的“Bestideas”输出的数据框,因此我执行以下操作: 1. 创建一个空数据框。2.创建for循环直到绑定我函数中每个名称的输出:
bestideas_collection = data.frame()
for (i in MYLISTOFNAMES){
bind_rows(bestideas_collection, Bestideas(i))
}
但是,我不断收到错误消息“较长的对象长度不是较短对象长度的倍数,较长的对象长度不是较短对象长度的倍数”
(没有插入两次,这是实际的错误信息)
如果这是可能的,任何人都可以帮助我吗?如果可以,我做错了什么?
解决方案
您的示例应该可以工作,您忘记在循环中分配它:
bestideas_collection = data.frame()
for (i in MYLISTOFNAMES){
bestideas_collection <- bind_rows(bestideas_collection, Bestideas(i))
}
请在提问时举个例子。我给一个:
Masterall <- data.frame(Name = rep(LETTERS[1:5],each = 10),value = rnorm(50))
MYLISTOFNAMES <- c("A","B")
最好的用途是生成一个 data.frame 列表,您可以实际绑定bind_rows
(或do.call(rbind, yourlist)
在基础 R 中,或rbindlist
在 中data.table
):
lapply(MYLISTOFNAMES,Bestideas) %>%
bind_rows()
因此,您不必创建循环更新的空 data.frame。您还可以使用map
from purr
:
purrr::map(MYLISTOFNAMES,Bestideas) %>%
bind_rows()
Name value
1 A 1.19390555
2 A 1.20447637
3 A -0.78496237
4 A 0.27154501
5 A -0.02922748
6 B -0.47460937
7 B -2.09716169
8 B 0.06161554
9 B 1.55524055
10 B 0.75727887
推荐阅读
- go - Gorm 查找结果到界面
- reactjs - 通过 Gatsby/React 在 MongoDB 上存储用户数据
- reactjs - TypeError: Cannot read properties of undefined (reading 'map') 。几个小时前我回来时它运行得很好它抛出了这个错误
- rust - 如何在没有 std 的情况下在 Rust 上进行睡眠/等待?
- r - 如何将系数添加到线性模型
- reactjs - React App:我无法单击任何输入字段或选择任何文本
- laravel - 有 PhpStorm 2021.1 Laravel 8 / Livewire 支持吗?
- javascript - 类型错误:setOpenModal 不是函数
- python - 如何将 3D 重塑为 2D ?但我不想失去中间的括号?
- python - python中的Int类如何表示负数