我有一个数据框列表:
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 单行的情况下执行此操作?
您正在循环列表元素,而不是列表元素的名称。因此,表达式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)