楼主: gdufsfit
3399 7

[问答] 大神们来指点一下我这段代码吧 [推广有奖]

  • 1关注
  • 0粉丝

已卖:1份资源

博士生

10%

还不是VIP/贵宾

-

威望
0
论坛币
11 个
通用积分
0.2372
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
1737 点
帖子
82
精华
0
在线时间
335 小时
注册时间
2014-10-19
最后登录
2023-11-13

楼主
gdufsfit 学生认证  发表于 2014-10-19 17:10:23 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
        其实这是coursera上R programming week2 的assignment,给定了332个表,表的名字是“001.csv”,"002.csv",..."010.csv...332.csv"让我编写一个函数pollutantmean,将表合在一起然后求某几个表某个属性的均值,代码如下:
pollutantmean=function(directory,pollutant,id=1:332){   #directory是目录,pollutant是属性,id是指定目录里的哪几个表
  x=vector("character",length=332)
  for(i in 1:9){
    x=paste("00",i,sep="")
  }
  for(i in 10:99){
    x=paste("0",i,sep="")
  }
  for(i in 100:332){
    x=paste(i)
  }
#这几行的作用是将文件的名称都放到vector x里面;
  dat=data.frame()
#创建数据框dat
  for(i in id){  
    a=read.csv(file=paste(directory,"/",x,".csv",sep=""),header=TRUE)
    dat=rbind(dat,a)
  }
#将id指定的几个表都合并在一起
  po=colMeans(dat$pollutant,na.rm=TRUE)
#求pollutant属性的均值
  print(po)
}  

然后我输入pollutantmean("specdata(这是目录)",“sulfate(这是目标属性)”,“1:332”(001.csv到332.csv全部合并))
我期望得到的是001到332的sulfate的均值,结果却显示“Error during wrapup: object 'dat' not found”,这是什么回事呢?作为R入门者的我弄了两天都还没弄出这个东西来,求解答!谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Programming assignment directory Character Director character function

沙发
daishen 发表于 2014-10-20 06:18:43
all.files = list.files(directory,full.names = T,pattern = ".csv")
然后该求什么求什么。

藤椅
gdufsfit 学生认证  发表于 2014-10-20 14:13:21
daishen 发表于 2014-10-20 06:18
all.files = list.files(directory,full.names = T,pattern = ".csv")
然后该求什么求什么。
呃,可是list.files不是只显示文件名字吗?

板凳
daishen 发表于 2014-10-20 17:59:49
all.files = list.files(path = "E:/RB",full.names = T,pattern = ".txt")
#all.files = all.files[38:length(all.files)]
dat = lapply(all.files,fread)
data = rbindlist(lapply(1:length(all.files),function(i) myfun(dat[])))

我就是这么干的。


报纸
gdufsfit 学生认证  发表于 2014-10-20 22:47:39
daishen 发表于 2014-10-20 17:59
all.files = list.files(path = "E:/RB",full.names = T,pattern = ".txt")
#all.files = all.files[38:le ...
我发现了一个问题,我现在的代码是这样的:
pollutantmean=function(directory,pollutant,id=1:332){
  all.files=list.files(directory,full.names=TRUE,pattern=".csv")
  dat=data.frame()
  for (i in id){
    a=read.csv(file=all.files,header=TRUE)
    dat=rbind(dat,a)
  }
  print(dat)
}
先不管那个pollutant,我这段代码不是应该创建了一个由332个表组成的dat吗,我运行函数的时候也能够打印出332个表合成的dat,但是在函数结束之后我再输入dat却会出现“error: object "dat" not found”,这又是怎么回事???

地板
daishen 发表于 2014-10-21 07:27:48
你的问题是把dat的作用域搞错了,这个dat是在函数内的,你在函数外调用当然是没有了。
另外,如果数据量大的话,建议使用data.table包,fread比read.csv快N倍,rbindlist比do.call快N倍,更不要说你用的那个最慢的语句了。

7
gdufsfit 学生认证  发表于 2014-10-21 21:24:31
daishen 发表于 2014-10-21 07:27
你的问题是把dat的作用域搞错了,这个dat是在函数内的,你在函数外调用当然是没有了。
另外,如果数据量大 ...
我是个绝对的初学者......谢谢指点了,我再试试看

8
waterhorse 发表于 2014-10-22 08:34:20
XIE XIE, LEARN

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 17:02