楼主: gdufsfit
5401 2

[问答] 求问for循环中逆序的问题 [推广有奖]

  • 1关注
  • 0粉丝

已卖:1份资源

博士生

10%

还不是VIP/贵宾

-

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

楼主
gdufsfit 学生认证  发表于 2014-12-4 13:46:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
        如题,直接上代码:
        complete=function(directory="specdata",id=1:332){
  files=list.files(directory,full.names=TRUE)
  nobs<- c()

  for(i in id){
    nobs[i]=sum(complete.cases(read.csv(files[i])))
  }
  nobs=na.omit(nobs)
  comp=data.frame(id,nobs)
  print(comp)
}
这段代码的意思就是根据id来对相应文件里面的完整个案进行计数,比如id为1:30,则函数输出的是一个数据框,第一列是id,第二列nobs对应是第1到第30个csv文件里的完整个案数目。那么问题来了:
       当我输入complete(directory="specdata",id=25:30),时,结果如下:
id nobs
1 25  463
2 26  586
3 27  338
4 28  475
5 29  711
6 30  932

        而id为30:25,时,结果如下:
id nobs
1 30  463
2 29  586
3 28  338
4 27  475
5 26  711
6 25  932

       可以看到无论id是25:30还是30:25,第二列nobs的值的顺序都是一样的,也就是说在第二个输出结果中,即使第一行id的值为30,其对应的nobs却仍然是第25个csv文件中完整个案的数目,求问为什么会出现这种情况?如何纠正呢?谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:for循环 For directory Director function function files

沙发
yywan0913 在职认证  发表于 2014-12-4 14:47:27
很好理解的 那是因为nobs=sum(complete.cases(read.csv(files)))  这句话的意思是
无论id是顺还是逆,nobs作为向量,对应各个位置,nobs的值是不会变化的。
  1. for(i in 1:length(id)){
  2.     nobs[i]=sum(complete.cases(read.csv(files[id[i]])))
  3.   }
复制代码
这样写应该就好多了
已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
李会超 + 40 精彩帖子
gdufsfit + 1 + 1 + 1 好的意见建议

总评分: 经验 + 40  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
gdufsfit 学生认证  发表于 2014-12-4 16:01:51
yywan0913 发表于 2014-12-4 14:47
很好理解的 那是因为nobs=sum(complete.cases(read.csv(files)))  这句话的意思是
无论id是顺还是逆,nobs ...
试了一下果然可以!谢谢解答!

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

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