【问题标题】:R-Code Loop-BugR 代码循环错误
【发布时间】:2013-05-23 03:38:46
【问题描述】:

我在运行我的 R 脚本时遇到了一点问题:

sensoren <- read.csv("C:/..../sensors.csv") 
messung <- read.table("C:/.../os.log")

s1 <- messung$V2
s2 <- messung$V4
s3 <- messung$V6
s4 <- messung$V8

i <- 1; j <- 1
while (i <= nrow(messung)){
+   while (j <= nrow(sensoren)){
+       if (s2[i] == sensoren[j,1] && s3[i] == sensoren[j,2] && s4[i] == sensoren[j,3]){ 
+           print(sensoren[j,5][drop=TRUE]); i <- i + 1; j <- 1;} else {j <- j + 1;}}}  

运行脚本时,我总是收到错误消息:+while (j

希望有人能帮助我,谢谢!!

编辑:

我更改了我的代码,现在看起来像这样:

while (i <= nrow(messung)){
+   while (j <= nrow(sensoren)){
+       if (c(s2[i],s3[i],s4[i]) == c(sensoren[j,1], sensoren[j,2], sensoren[j,3])){ 
+           print(sensoren[j,5][drop=TRUE]); i <- i + 1; j <- 1;} else {j <- j + 1;}}}  

但还是一样的错误信息...

【问题讨论】:

  • 也许检查您的sensoren 数据集是否已成功加载。你应该尝试矢量化你的代码。

标签: r loops error-handling


【解决方案1】:

看起来 nrow(sensoren) 返回 NULL,当它的参数不是矩阵或数据框时,nrow() 会这样做。检查文件是否按预期读入。

另外,我很感激你没有问这个问题,但是使用嵌套循环并不是一种非常“R”的做事方式,因为 R 在这些操作上非常缓慢。您可能想阅读 R 中的 merge()、apply() 和矢量化。

【讨论】:

  • 嗯,我不认为是这种情况,在阅读脚本后,nrow(sensoren) 给了我一个正确的值 15。但是我会按照你的建议给自己做一个关于矢量化的讲座,虽然我真的不知道它是否能解决我的问题。
  • 难道你真的在写“+while”而不是“while”?错误消息显示“+while”,这表明...
  • 哦,伙计,你是对的,不知道为什么,但编译器确实会读取“+while”,在将这一行放在上面的行之后,它可以正常工作...... -.-
猜你喜欢
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2011-06-21
  • 2014-04-03
  • 1970-01-01
相关资源
最近更新 更多