首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用purrr向dataframe追加行

使用purrr向dataframe追加行
EN

Stack Overflow用户
提问于 2018-06-10 01:49:56
回答 1查看 266关注 0票数 0

我有一项任务,每周需要很多api调用。我想通过purrr将所有这些数据和简洁的代码附加在一起,但我在我的函数中很难让Sys.sleep工作。

下面是一些假数据。我假装这是API后端:

代码语言:javascript
复制
#call 1
week1 <- as_tibble(list(week = rep(1,7),value = rnorm(7,0,1)))

#call 2
week2 <- as_tibble(list(week = rep(2,7),value = rnorm(7,0,1)))

#call 3
week3 <- as_tibble(list(week = rep(3,7),value = rnorm(7,0,1)))

#append
pretend_full_api_data <- bind_rows(week1, week2, week3)

此函数起作用

代码语言:javascript
复制
by_api_call <- function(weeknumber){
  weeki <- pretend_full_api_data %>%
    filter(week == weeknumber)
}

seq(from = 1, to = 3) %>% 
map_df(~by_api_call(.))

问题是API通常需要一段睡眠时间。所以我试着修改如下:

代码语言:javascript
复制
by_api_call <- function(weeknumber){
  weeki <- pretend_full_api_data %>%
    filter(week == weeknumber)
    Sys.sleep(2) #required sleep for API calls
}

seq(from = 1, to = 3) %>% 
map_df(~by_api_call(.))

上面的代码返回0 rows。上面的函数有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2018-06-10 12:46:59

实际上,这是不起作用的,因为函数by_api_call不会返回任何内容。您需要添加函数return才能从您的函数中实际检索某些内容。

如果您需要查看技术讨论,请参阅Hadley Wickham (R语言中最有价值的球员)所著的Advanced R一书。

您的代码需要进行这种调整,才能真正完成所需的工作

代码语言:javascript
复制
# API stuff..

# this is the function that actually works...

by_api_call <- function(weeknumber){
  weeki <- pretend_full_api_data %>%
    filter(week == weeknumber)
    Sys.sleep(2) #required sleep for API calls

  return(weeki) # return is your friend...
}

# calling the API function
week_numbers <- seq(from = 1, to = 3, by = 1)

(map_df(week_numbers, by_api_call))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50777007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档