输出应该输入另一个功能的功能

时间:2016-05-31 02:29:01

标签: r function output

所以,我有一个功能:

 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)参数中的错误意味着行数不同。所以,我不知道该怎么办......

1 个答案:

答案 0 :(得分:0)

首先,reproducible example始终有助于回答您的问题,并清楚地说明您的功能应该做什么/应该做什么。我们无法运行您的示例代码。

接下来,您的corr功能似乎有误。您对id进行了多次引用,但实际上并未在示例代码中填充此变量。因此,我们只需要猜测您需要帮助的内容。

认为你要做的是:

  1. 给定id,使用complete
  2. 致电id
  3. 使用代码中的nobs
  4. 在这种情况下,您需要确保将来电的输出存储到complete,例如

    comp <- complete('spec', id)
    

    您可以通过id访问comp['id']列值nobscomp['nobs']值,以便您可以这样做。

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

    如果您希望稍后将其恢复,请确保存储某处cor的输出。

    你必须解决id自己未定义的问题,因为目前还不清楚你想要的是什么。