簡體   English   中英

R循環打開文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM