将purr::walk2()应用于管道末端的data.frame中的data.frame
我有一个R数据框,其中有一列数据框,每个数据框都要打印到文件中:将purr::walk2()应用于管道末端的data.frame中的data.frame,r,purrr,R,Purrr,我有一个R数据框,其中有一列数据框,每个数据框都要打印到文件中: df0 <- tibble(x = 1:3, y = rnorm(3)) df1 <- tibble(x = 1:3, y = rnorm(3)) df2 <- tibble(x = 1:3, y = rnorm(3)) animalFrames <- tibble(animals = c('sheep', 'cow', 'horse'), frames =
df0 <- tibble(x = 1:3, y = rnorm(3))
df1 <- tibble(x = 1:3, y = rnorm(3))
df2 <- tibble(x = 1:3, y = rnorm(3))
animalFrames <- tibble(animals = c('sheep', 'cow', 'horse'),
frames = list(df0, df1, df2))
或使用purr
的walk2
功能:
walk2(animalFrames$animals, animalFrames$frames, ~write.csv(.y, file
= paste0('test_', .x, '.csv')))
有没有什么方法可以将这个walk函数放在magrittr
管道的末尾
我的想法是:
animalFrames %>% do({walk2(.$animals, .$frames, ~write.csv(.y, file = paste0('test_', .x, '.csv')))})
但这给了我一个错误:
大概是因为write.csv()
正在返回数据帧,而do()
不处理这些或其他内容
我并没有真正的编码要求,我必须把walk放在管道的末尾(事实上,我总是可以围绕管道工作),但似乎我缺少了一些基本的东西,这让我感到困扰。
有什么建议吗?我想你根本不需要
去做。以下两项对我都有用。第一个简单地与您的相同减去do
,我认为,第二个使用magrittr
方便的%%
操作符将列名公开给walk2
并避免$
。请注意,如果这是在管道的末端,那么使用walk2
还是map2
都没有多大关系,因为您不关心此步骤后返回的内容
注意:出于习惯,我还将paste0
和write.csv
替换为tidyverse
等同物,但它们很容易放回原处
库(tidyverse)
df0以下对象已从“package:purrr”屏蔽:
#>
#>设置名称
#>以下对象已从“package:tidyr”屏蔽:
#>
#>提取
动物模型%$%
步行2(
.x=动物,
.y=帧,
.f=~write_csv(.y,str_c(“test_”),.x,.csv)
)
由(v0.2.0)于2018年3月13日创建
animalFrames %>% do({walk2(.$animals, .$frames, ~write.csv(.y, file = paste0('test_', .x, '.csv')))})
Error: Result must be a data frame, not character
Traceback:
1. animalFrames %>% do({
. walk2(.$animals, .$frames, ~write.csv(.y, file = paste0("test_",
. .x, ".csv")))
. })
2. withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
3. eval(quote(`_fseq`(`_lhs`)), env, env)
4. eval(quote(`_fseq`(`_lhs`)), env, env)
5. `_fseq`(`_lhs`)
6. freduce(value, `_function_list`)
7. withVisible(function_list[[k]](value))
8. function_list[[k]](value)
9. do(., {
. walk2(.$animals, .$frames, ~write.csv(.y, file = paste0("test_",
. .x, ".csv")))
. })
10. do.data.frame(., {
. walk2(.$animals, .$frames, ~write.csv(.y, file = paste0("test_",
. .x, ".csv")))
. })
11. bad("Result must be a data frame, not {fmt_classes(out)}")
12. glubort(NULL, ..., .envir = parent.frame())
13. .abort(text)