【问题标题】:writing a list of dataframes to file with lapply: How to paste object names to file names?使用 lapply 将数据框列表写入文件:如何将对象名称粘贴到文件名?
【发布时间】:2018-02-11 17:14:43
【问题描述】:

我有一个数据框列表:

lists <- replicate(10, as.data.frame(matrix(rnorm(100), 10, 10)), simplify = FALSE)
names(lists) <- LETTERS[1:10]

我想将所有数据帧写入一个根据它们在 R 中的对象名称命名的单独文件。我尝试使用 lapplypaste,但这非常失败:

lapply(lists, function(x) write.table(x, file=paste(x,".txt"), sep="\t"))
Error in file(file, ifelse(append, "a", "w")) : 
  invalid 'description' argument
In addition: Warning message:
In if (file == "") file <- stdout() else if (is.character(file)) { :
  the condition has length > 1 and only the first element will be used
Called from: file(file, ifelse(append, "a", "w"))

如何在不为 n 个 data.frames 写 n 行的情况下做到这一点?

【问题讨论】:

    标签: r list lapply


    【解决方案1】:

    您正在循环遍历列表元素,而不是列表元素的名称。所以表达式paste(x,".txt") 尝试将data.frame 粘贴到.txt,但您想将列表元素的名称粘贴到.txt。因此,您可以尝试以下方法:

    lists <- replicate(10, as.data.frame(matrix(rnorm(100), 10, 10)), simplify = FALSE)
    names(lists) <- LETTERS[1:10]
    
    lapply(names(lists), function(x) write.table(lists[[x]], file=paste(x,".txt"), sep="\t"))
    

    要抑制控制台输出,请将语句包装在 invisible() 中,或者使用常规 for 循环:

    for (x in names(lists))
      write.table(lists[[x]], file=paste(x,".txt"), sep="\t")
    

    【讨论】:

    • 控制台输出起初令人困惑,但这正是我想要的。谢谢!
    • 嗨@nouse,我同意控制台输出有点混乱。我添加了两个选项来防止这种情况发生(如果您不熟悉这些选项。)希望这会有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2021-02-11
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2022-11-28
    相关资源
    最近更新 更多