2017-07-31 130 views
2

我是編程新手,目前我正在編寫一個函數來處理工作目錄中的數百個csv文件。R studio在我的函數中找不到對象

文件中有大量的NA值。

函數(我稱之爲corr)有兩個參數:目錄和一個閾值(長度爲1的數字向量,表示完整情況的數量)。

該功能的目的是爲硫酸鹽和硝酸鹽(電子表格中的第二和第三列)兩列取完整案例,並計算它們之間的相關性,如果完整案例的數量大於閾值參數。

如果函數滿足閾值要求(默認閾值爲0),該函數應返回具有相關性的向量。

當我運行代碼,我回去以下兩項:我在函數創建

  1. A +登錄控制檯

OR

2.對象可以找不到。

任何幫助將不勝感激。先謝謝你!

corr <- function(directory, threshold=0){ 
    filelist2<- data.frame(list.files(path=directory, 
            pattern=".csv", full.names=TRUE))    

    corvector <- numeric() 

    for(i in 1:length(filelist2)){ 
    data <-data.frame(read.csv(filelist2[i])) 
    removedNA<-complete.cases(data) 
    newdata<-data[removedNA,2:3] 


    if(nrow(removedNA) > threshold){ 
     corvector<-c(corvector, cor(data$sulfate, data$nitrate)) 


    } 


    } 
    corvector 
} 
+4

控制檯中的「+」號意味着R正在等待更多的輸入來完成表達式 - 它通常意味着你沒有關閉某個地方的一個parens /花括號。 – Marius

+0

函數中定義的對象在該範圍之外將不可用。例如嘗試'f = function()local.object = 1; F(); local.object' – dww

+0

@dww哪個對象在OP的例子中的函數之外被調用? – Richard

回答

0

我不認爲你的nrow(removedNA)做你認爲它的作用。要複製示例,我使用mtcars數據集。

data <- mtcars # create dataset 
data[2:4, 2] <- NA # create some missings in column 2 
data[15:17, 3] <- NA # create some missing in column 3 
removedNA <- complete.cases(data) 
table(removedNA) # 6 missings indeed 
nrow(removedNA) # NULL removedNA is no data.frame, so nrow() doesn't work 
newdata <- data[removedNA, 2:3] # this works though 
nrow(newdata) # and this shows the rows in 'newdata' 
#---- therefore instead of nrow(removedNA) try 
if(nrow(data)-nrow(newdata) < threshold) { 
    ... 
} 

NB:我在<與閾值線改變>。我想這取決於您是否要設置絕對最小行數(在這種情況下,您可以簡單地使用nrow(newdata) > threshold)作爲閾值,或者您是否希望閾值反映原始數據中的不同行數以及「新」數據。