【发布时间】:2017-05-05 05:14:14
【问题描述】:
这是数据:
1:
30878
2647871
1283744
2488120
317050
1904905
1989766
14756
1027056
1149588
1394012
1406595
2529547
1682104
2625019
2603381
1774623
470861
712610
1772839
1059319
2380848
548064
10:
1952305
1531863
1000:
2326571
977808
1010534
1861759
79755
98259
1960212
97460
2623506
2409123
...
':'后面的数字表示是movieID,然后下面几行是customerID,我想写一个循环来检查数据是否包含':',下面是我试过的代码:
for (i in 1:length(line)){
#print(line[i])
if(grep(':', line[i])==1 ){
movieID<-as.integer(substr(line[i],1,nchar(line[i])-1) )
next
}
else{
customerID<-as.integer(line[i])
#do something
}
}
当我运行这段代码时,发生了一个错误,错误是:参数长度为零 我搜索了这个错误,然后我更改了if语句:
if( !is.na(line[i]) && nchar(line[i])>1 && grep(':', line[i])==1 )
还有一个错误:需要 TRUE/FALSE 的地方缺少值
我无法解决。 这是我的代码:
for (i in 1:27){
#print(testData[i])
if(grep(':', testData[i])==1 ){
movieID<-as.integer(substr(testData[i],1,nchar(testData[i])-1) )
print(testData[i])
next
}else{
customerID<-as.integer(testData[i])
print(movieID)
print(customerID)
#print(subset.data.frame(mydata[[movieID]],mydata[[movieID]]$customerID==customerID) )
}
}
这是输出和错误:
[1] "1:"
Error in if (grep(":", testData[i]) == 1) { : argument is of length zero
看起来错误发生在 else 语句中。
【问题讨论】:
-
您可以添加打印语句来尝试查看您的代码在哪一行失败了吗?逻辑对我来说是正确的(我在本地测试了每一块)。也许您的文件在某处有一些不良数据。也许是因为 EOF 案例而失败?
-
我已经更新了问题,我确定数据是正确的。
标签: r if-statement