这个问题几乎与previous question相同,但差异很大,以至于该问题的答案在这里不起作用。就像上一个问题中的@chase一样,我想以下列格式(自定义fasta)为数据帧的每个分割写出多个文件。
#same df as last question
df <- data.frame(
var1 = sample(1:10, 6, replace = TRUE)
, var2 = sample(LETTERS[1:2], 6, replace = TRUE)
, theday = c(1,1,2,2,3,3)
)
#how I want the data to look
write(paste(">", df$var1,"_", df$var2, "\n", df$theday, sep=""), file="test.txt")
#whole df output looks like this:
#test.txt
>1_A
1
>8_A
1
>4_A
2
>9_A
2
>2_A
3
>1_A
3
但是,我不想从整个数据帧中获取输出,而是为每个数据子集生成单独的文件。使用d_ply
如下:
d_ply(df, .(theday), function(x) write(paste(">", df$var1,"_", df$var2, "\n", df$theday, sep=""), file=paste(x$theday,".fasta",sep="")))
我收到以下输出错误:
Error in file(file, ifelse(append, "a", "w")) :
invalid 'description' argument
In addition: Warning messages:
1: In if (file == "") file <- stdout() else if (substring(file, 1L, :
the condition has length > 1 and only the first element will be used
2: In if (substring(file, 1L, 1L) == "|") { :
the condition has length > 1 and only the first element will be used
有关如何解决这个问题的任何建议吗?
谢谢, zachcp
答案 0 :(得分:3)
您的代码存在两个问题。
首先,在构建文件名时,您将向量x$theday
传递给paste()
。由于x$theday
取自data.frame的一列,因此它通常包含多个元素。当您将多个文件名传递给其write()
参数时,您看到的错误是file=
抱怨。使用unique(x$theday)
代替确保您只会将单个文件名粘贴在一起而不是多个文件名。
其次,你没有看到它,但你可能想写x
(data.frame的当前子集)的内容,而不是整个内容每个文件df
。
这是更正后的代码,看起来效果很好。
d_ply(df, .(theday),
function(x) {write(paste(">", x$var1,"_", x$var2, "\n", x$theday, sep=""),
file=paste(unique(x$theday),".fasta",sep=""))
})