使用 lapply 将数据帧列表写入文件:如何将对象名称粘贴到文件名?

nou*_*use 4 r list lapply

我有一个数据框列表:

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

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

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"))
Run Code Online (Sandbox Code Playgroud)

如何在不为 n 个 data.frames 编写 n 单行的情况下执行此操作?

Flo*_*ian 6

您正在循环列表元素,而不是列表元素的名称。因此,表达式paste(x,".txt")尝试将 a 粘贴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"))
Run Code Online (Sandbox Code Playgroud)

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

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