[英]R loop opening files
我試圖運行一個簡單的5行命令,但超過9000個不同文件。 我寫了以下for循環
setwd("/Users/morandin/Desktop/Test")
output_file<- ("output_file.txt")
files <- list.files("/Users/morandin/Desktop/Test")
for(i in files) {
chem.w.in <- scan(i, sep=",")
pruned.tree<-drop.tip(mytree,which(chem.w.in %in% NA))
plot(pruned.tree)
pruned.tree.ja.chem.w.in <- phylo4d(pruned.tree, c(na.omit(chem.w.in)))
plot(pruned.tree.ja.chem.w.in)
out <- abouheif.moran(pruned.tree.ja.chem.w.in)
print(out)
}
嘿,我在編輯我的問題:上面的代碼現在完美地完成了for循環(感謝您的所有幫助)。 我的輸出仍然有問題。
我可以通過bash命令使用R重定向整個輸出,但是我需要已處理文件的名稱。 我的輸出如下所示:
class: krandtest
Monte-Carlo tests
Call: as.krandtest(sim = matrix(res$result, ncol = nvar, byrow = TRUE),
obs = res$obs, alter = alter, names = test.names)
Number of tests: 1
Adjustment method for multiple comparisons: none
Permutation number: 999
Test Obs Std.Obs Alter Pvalue
1 dt 0.1458514 0.7976225 greater 0.2
other elements: adj.method call
有沒有一種方法可以打印Pvalue結果和文件名(元素i)?
謝謝
我懷疑這里出了list.files()
,默認情況下list.files()
返回僅文件名的列表,而不返回文件的完整路徑。 將full.names
設置為TRUE
將解決此問題。 請注意,您不必添加txt
將文件名添加為list.files()
已經返回了現有文件的完整路徑。
由於Paul Hiemstra的答案回答了#1,因此這是#2的答案,假設“答案”是指“ abouheif.moran(pruned.tree.ja.chem.w.in)
的打印輸出”。
將cat()
與參數append = true
。 例如:
output_file = "my_output_file.txt"
for(i in files) {
# do stuff
# make plots
out <- abouheif.moran(pruned.tree.ja.chem.w.in)
out <- sprintf("-------\n %s:\n-------\n%s\n\n", i, out)
cat(out, file = output_file, append = TRUE)
}
這將產生一個名為my_output_file.txt
的文件,如下所示:
-------
file_1:
-------
output_goes_here
-------
file_2:
-------
output_goes_here
顯然,格式完全取決於您; 我只是想展示在這里可以做什么。
一種替代解決方案是將整個腳本sink()
,但是我寧願對此進行明確說明。 中間的道路可能是只sink()
一小部分代碼,但在極端情況下,則是偏好或樣式問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.