如何在R的dplyr中为数据框生成含不同tempfile的列?
解决方法
方法1:使用rowwise()逐行执行
rowwise()会强制mutate中的函数逐行运行,这样每行都会独立调用tempfile()生成唯一的临时文件路径,记得最后用ungroup()取消逐行模式,避免影响后续操作:
library(dplyr) df <- tibble(foo = 1:5) df |> rowwise() |> mutate(my_tmp_file = tempfile()) |> ungroup()
方法2:用purrr::map_chr()配合长度匹配的向量
不需要用到向量的具体值,只需要一个和数据框行数一致的向量来触发多次调用tempfile()。可以用数据框的现有列,也可以直接生成对应长度的序列:
library(dplyr) library(purrr) df <- tibble(foo = 1:5) # 利用现有列触发调用 df |> mutate(my_tmp_file = map_chr(foo, ~tempfile())) # 不依赖现有列的通用写法 df |> mutate(my_tmp_file = map_chr(seq(nrow(df)), ~tempfile()))
方法3:将tempfile()转换为向量化函数
用Vectorize()工具将非向量化的tempfile()包装成向量化函数,之后就能直接在mutate中使用,自动为每行生成不同路径:
library(dplyr) # 生成向量化的临时文件函数 vec_tempfile <- Vectorize(tempfile) df <- tibble(foo = 1:5) df |> mutate(my_tmp_file = vec_tempfile())
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

