【问题标题】:R studio doesn't find objects in my functionR studio 在我的函数中找不到对象
【发布时间】:2018-01-06 10:47:15
【问题描述】:

我是编程新手,目前正在编写一个函数来遍历工作目录中的数百个 csv 文件。

文件中有大量的 NA 值。

该函数(我称之为 corr)有两个参数,目录和一个阈值(长度为 1 的数字向量,表示完整案例的数量)。

该函数的目的是获取硫酸盐和硝酸盐两列(电子表格中的第二列和第三列)的完整案例,如果完整案例的数量大于阈值参数,则计算它们之间的相关性。

如果满足阈值要求,函数应该返回一个具有相关性的向量(默认阈值为 0)。

当我运行代码时,我得到以下两个:

  1. 控制台中的+号

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   
}

【问题讨论】:

  • 控制台中的+ 符号表示 R 正在等待更多输入来完成表达式 - 这通常意味着您尚未在某处关闭括号/花括号。
  • 函数内部定义的对象在该范围之外将不可用。例如试试f = function() local.object = 1; f(); local.object
  • @dww 在 OP 示例中的函数外部调用了哪个对象?
  • @Richard OP 声明“找不到我在函数中创建的对象”。任何人都可以猜测 OP 试图访问哪些对象

标签: r function loops


【解决方案1】:

我认为您的 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) {
    ...
}

注意:我将&lt; 中的&gt; 更改为与阈值一致。我想这取决于您是否要设置绝对最小行数(在这种情况下您可以简单地使用nrow(newdata) &gt; threshold)作为阈值,或者您是否希望阈值反映原始数据中的不同行数和'新的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多