2017-07-31 2525 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)作为阈值,或者您是否希望阈值反映原始数据中的不同行数以及“新”数据。

相关问题