首页 > 解决方案 > 变异:一次分配多个变量

问题描述

我有一个如下所示的函数(简化)

get_identifiers<-function(shares){
  result<-c()
  for(share in shares){
    
    result<-rbind(result,c("2", "2"))
  }
  return (result)
}

它返回两列!

现在,我想调用该函数并将其值分配给我现有 tibble 的两个变量。我正在寻找类似的东西

res %>% mutate(vars(c("identifier","sedol")),get_identifiers(symbol))

我怎样才能做到这一点?

我知道我可以做类似以下的事情,这似乎不是很有效

res %>% mutate(identifier=get_identifiers(symbol)[1]) 
  %>% mutate(sedol=get_identifiers(symbol)[2]) 

标签: rtidyversedplyr

解决方案


您可以对功能进行一些更改 -

get_identifiers<-function(shares){
  result<-c()
  for(share in shares){
    result<- rbind(result,c("2", "2"))
  }
  result <- data.frame(result)
  names(result) <- c("identifier","sedol")
  return (result)
}

有更好的方法来编写上面的代码,但我知道这只是一个简化的例子。

然后将输出保存在列表中并用于unnest_wider将它们放在不同的列中。

library(dplyr)
library(tidyr)

res %>% 
  mutate(data = list(get_identifiers(symbol))) %>%
  unnest_wider(data)

推荐阅读