如何抑制purrr::pmap调用自定义写文件函数后的NULL输出?
解决方法
方法1:使用purrr::pwalk替代pmap
purrr的pwalk函数专门用于执行有副作用的操作(比如写入文件),它不会收集函数的返回值,因此不会输出NULL列表:
library(purrr) pwalk(list(text = c("test1", "test2"), name = c("1.txt", "2.txt")), fun)
方法2:用invisible()包裹pmap调用
如果一定要用pmap,可以把整个调用放在invisible()中,抑制控制台输出:
invisible(pmap(list(text = c("test1", "test2"), name = c("1.txt", "2.txt")), fun))
方法3:修改原函数返回隐形值
在函数末尾添加invisible(NULL),让函数返回的NULL不被控制台打印:
fun <- function(text, name){ writeLines(text, name) invisible(NULL) } # 此时调用pmap不会显示NULL列表 pmap(list(text = c("test1", "test2"), name = c("1.txt", "2.txt")), fun)
原因说明
writeLines函数本身的返回值是NULL,而pmap会自动收集每个函数调用的返回值并组成列表输出。上述方法要么避免收集返回值,要么抑制返回值的显示,从而解决问题。
内容的提问来源于stack exchange,提问作者trilisser
相关产品推荐
相关产品推荐

