2014-02-26 42 views
0

我有一個文件夾包含相同時間序列數據的文件。這裏是我的數據示例:接收器堆棧已滿 - 保存表格函數的輸出

Date  Time  Letter 
2009-09-25 23:56:00 a 
2009-09-25 23:57:00 a 
2009-09-25 23:58:00 b 
2009-09-25 23:59:00 c 
2009-09-26 00:00:00 c 
2009-09-26 00:00:00 c 
2009-09-26 00:00:00 c 
2009-09-26 00:00:00 b 
2009-09-26 00:00:00 a 

我正在尋找將我的函數應用於文件夾中的所有文件。在此範圍內,我將使用按日期拆分將每個文件拆分爲不同的日期,然後對這些文件應用一個函數。然後,我使用表格向我返回日期,然後是當天輸入的每個字母的編號。因此,對於上述數據我會回來:

$2009-09-25 
a 2 
b 1 
c 1 

$2009-09-26 
a 1 
b 1 
c 3 

我的問題是,當我嘗試使用沉到輸出定向到一個文件,我得到的錯誤「接收器堆棧已滿」。

setwd("C:\\User1\\Documents\\Files") 
path <- "C:\\User1\\Documents\\Files" 

files <- list.files(path = path) 

lapply(files,function(files, path){ 
    path <- "C:\\User1\\Documents\\Files" 

    fp <- file.path(path, files) 
    df <- read.csv(fp) 

#A few more calculations with data here 

# Separating data frame into large list of separate days 
eachday <- split(df, df$Date) 

myfunction <- function(df){ 

# More calculations with data within function 

#Sink output to file 
sink(file="testing121.csv", append=TRUE, type = "output", split=FALSE) 
return(table(night$Activity)) 
} 

# Apply function over list of days 
lapply(eachday, myfunction) 

}) 

如果關閉接收器中的接收器,它也不起作用。有沒有更好的方法將數據保存到具有每個特定日期和Letter列頻率的文件中?爲什麼這個下沉是錯誤的?

+0

'sink'用於將控制檯輸出寫入文件。您想使用'write.csv'來構建數據的CSV文件。 – Thomas

回答

0

我認爲您期待return輸出到當前文件sink。這不是R的工作原理。

return向調用函數返回一個值。它不會創建任何輸出。你可能試圖做的是:

... 
sink(file="foo.csv") 
print(mydata) 
sink() 
} 

即設置接收器,打印一些東西(它轉到接收器文件),然後重置接收器。你不關心返回值,所以你不使用return

正如在評論中指出,這不是要建立一個適當的.csv文件(它看起來像控制檯輸出,與[1] 10 20 30等),讓您真正需要使用write.tablewrite.csv,而不是使用sink功能。

+0

感謝您的回答。我可以得到這個工作,但我想我喜歡沉沒表函數的輸出的原因是,它是我似乎能夠得到相應日期的唯一方式,哪種打印看起來沒有。 – user3021648