2016-05-31 70 views
-1

那麼的投入,我有一個函數:輸出應該是另一個功能

complete <- function(directory,id = 1:332) { 
directory <- list.files(path="......a") 
g <- list() 
for(i in 1:length(directory)) { 
    g[[i]] <- read.csv(directory[i],header=TRUE) 
} 
    rbg <- do.call(rbind,g) 

rbgr <- na.omit(rbg) #reads files and omits NA's 

complete_subset <- subset(rbgr,rbgr$ID %in% id,select = ID) 
table.rbgr <- sapply(complete_subset,table) 
    table.rbd <- data.frame(table.rbgr) 
    id.table <- c(id) 
    findla.tb <- cbind (id.table,table.rbd) 
    names(findla.tb) <- c("id","nob") 
    print(findla.tb) #creates table with number of observations 
} 

基本上當你調用特定的數字小ID(如4), 你想獲得這個輸出

id nobs 
    15 328 

所以,我只需要NOBS數據被送入如果NOBS值比另一個任意確定的值(T)大,其測量兩列之間的相關性的另一功能。由於nobs是由id的值決定的,我不確定如何創建一個考慮其他函數的輸出的函數?

我已經試過這樣的事情:

corr <- function (directory, t) { 
 directory <- list.files(path=".......") 
 g <- list() 
 for(i in 1:length(directory)) { 

 g[[i]] <- read.csv(directory[i],header=TRUE) 

  } 

    rbg <- do.call(rbind,g) 
    g.all <- na.omit(rbg) #reads files and removes observations 

    source(".....complete.R") #sourcing the complete function above 
    complete("spec",id) 
    g.allse <- subset(g.all,g.all$ID %in% id,scol) 
    g.allnit <- subset(g.all,g.all$ID %in% id,nit) 
    for(g.all$ID %in% id) { 
    if(id > t) { 
     cor(g.allse,g.allnit) #calcualte correlation of these two columns if they have similar id 
    } 
    } 
    #basically for each id that matches the ID in g.all function, if the id > t variable, calculate the correlation between columns 
    } 
complete("spec", 3) 
cr <- corr("spec", 150) 
head(cr) 

我也試圖使完整功能的data.frame,但它不工作,它給了我下面的錯誤:在data.frame 錯誤(... check.names = false)參數意味着不同的行數。所以,我不知道如何繼續......

回答

0

首先,reproducible example總是有助於讓您的問題得到解答,並清楚說明您的功能應該做什麼。我們無法運行您的示例代碼。

接下來,您似乎在您的corr函數中有錯誤。您對id進行了多次引用,但從未實際填充示例代碼中的此變量。所以我們只需要猜測你需要什麼幫助。

認爲你正在嘗試做的是:

  1. 給予id,調用completeid
  2. 使用不同於nobs在你的代碼。

在這種情況下,您需要確保將您的呼叫輸出存儲到complete,例如,

comp <- complete('spec', id) 

您可以訪問id列值comp['id'],並通過comp['nobs']nobs值,所以你可以做如

if (comp['nobs'] > t) { 
    # do stuff e.g. 
    cor(g.allse, g.allnit) 
} 

確保您cor輸出的地方,如果你想獲得actualy回來後。

你將不得不修復你自己定義的id的問題,因爲它不清楚你想要的是什麼。