R数据选择使用sapply不工作 [英] R data selection using sapply not working

查看:170
本文介绍了R数据选择使用sapply不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码来获取污染物的含义。程序的数据在名称为001.csv,002.csv,...到332.csv的文件夹指定数据中。任何一个数据的名称都给出以下名称:

  [1]DatesulfatenitrateID

在下面的代码中,我必须计算污染物硝酸盐或硫酸盐的平均值。我认为代码是正确的。但资料$ pollutant正在提供


NULL



污染物错误,sulfate,23):尝试
应用非函数


方式:

 污染物(specdata,硝酸盐,23)
/ pre>

我在这里做错了什么?

 污染物<  -  function(directory,pollutant,id = 1:332){
f< - function(num){
if(num> = 0& num = 9){
fname < - paste('specdata / 00',as.character(num),。csv,sep =)
}
else if(num> = 10& num& = 99){
fname < - paste('specdata / 0',as.character(num),。csv,sep =)
}
else {
fname< - paste('specdata /',as.character(num),。csv,sep =)
}
data< - read.csv(fname)
data< - data [complete.cases(data),]
return(mean(data $ pollutant))
}
results< - sapply(id,f)
return(results)

}


解决方案

你最可能的错误是调用 data $ pollutant 引起的。你有 pollutant =nitrate,这是一个字符串,在这种情况下,引用 $ 工作。使用 [] 代替,这里是一个最小的例子:

  df< -  data.frame(hello = 1:3,world = 5)
name< - hello
df $ name
NULL
df [name]
#hello
#1 1
#2 2
#3 3


I have following code for getting the pollutant mean. The data for the program are in folder specdata with names "001.csv", "002.csv", ... to "332.csv" . The names of any one data gives following names:

[1] "Date"    "sulfate" "nitrate" "ID"  

In the code below, I have to calculate the mean of pollutant nitrate or sulfate . I think the code is correct. But data$pollutant is giving

NULL

Error in pollutantmean("specdata", "sulfate", 23) : attempt to apply non-function

The code is supposed to call in following way:

pollutantmean("specdata", "nitrate", 23)

What am I doing wrong here??

pollutantmean <- function(directory, pollutant, id = 1:332) {
  f <- function(num){
    if(num>=0 & num<=9){
      fname <- paste('specdata/00',as.character(num),".csv",sep="")
    }
    else if (num>=10 & num <=99){
      fname <- paste('specdata/0',as.character(num),".csv",sep="")
    }
    else{
      fname <- paste('specdata/',as.character(num),".csv",sep="")
    }
    data <- read.csv(fname)
    data <- data[complete.cases(data),]
    return(mean(data$pollutant))
  }
  results <- sapply(id, f)
  return(results)

}

解决方案

The error you have is most probably caused by calling data$pollutant. You have pollutant="nitrate", which is a character string, in that case reference by $ is not going to work. Use [] instead, here's a minimal example:

df <- data.frame(hello=1:3, world=5)
name <- "hello"
df$name
NULL
df[name]
#  hello
#1     1
#2     2
#3     3

这篇关于R数据选择使用sapply不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆