我遇到了问题。 这是我对R的说明:
myfiles <- list.files("D:/dolnyslask/2011/after", pattern=".csv")
for (j in 1:length(myfiles)) {
thisfile <- read.csv(myfiles[j], header = T, sep=";", na.string="NA", comment.char="")
for (i in thisfile) {
x = sd(i, na.rm=T)
y = length (na.omit(i))
if (y == 0) {
cat(file=myfiles[j], append=F, (paste("-","\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, (paste("-", "\t")))
{cat(file=myfiles[j], append=F, paste(length(na.omit(i)), "\n"))
}}}}}}}}}}}
} else if (x == 0) {
cat(file=myfiles[j], append=F, paste(format(min(i, na.rm=T), digits=5),"\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(max(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(sd(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T) - mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T) - mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format((mean(i, na.rm=T) - mean(i, na.rm=T))/median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format((mean(i, na.rm=T) - mean(i, na.rm=T))/median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(length(na.omit(i)), "\n"))
}}}}}}}}}}}
} else {
cat(file=myfiles[j], append=F, paste(format(min(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(max(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(sd(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(t.test(na.omit(i), conf.level=0.90)$conf.int, digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format(t.test(na.omit(i), conf.level=0.90)$conf.int - mean(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(format((t.test(na.omit(i), conf.level=0.90)$conf.int - mean(i, na.rm=T))/median(i, na.rm=T), digits=5), "\t"))
{cat(file=myfiles[j], append=F, paste(length(na.omit(i)), "\n"))
}}}}}}}}
}
}
}
我正在处理csv文件(大约600个)(来自不同年份),其中一个看起来像这样:
1 NA NA NA NA NA NA 4.0 NA NA 10.0 NA NA NA
2 NA NA NA NA NA NA 12.1 NA NA 8.5 NA NA NA
3 NA NA NA NA NA NA 14.8 NA NA 6.0 NA NA NA
4 NA NA NA NA NA NA 15.0 NA NA 7.4 NA NA NA
5 NA NA NA NA NA NA 16.0 NA NA 8.0 NA NA NA
6 NA NA NA NA NA NA 15.0 NA NA 6.5 NA NA NA
7 NA NA NA NA NA NA 17.8 NA NA 5.8 NA NA NA
8 NA NA NA NA NA NA 16.4 NA NA 6.7 NA NA NA
9 NA NA NA NA NA NA 11.7 NA NA 7.7 NA NA NA
10 NA NA NA NA NA NA 7.4 NA NA 10.9 NA NA NA
11 NA NA NA NA NA NA 3.8 NA NA NA NA NA NA
但它们更大。
当我在示例中使用我的循环时,它可以工作。但当我将它用于数据时,我需要这样做,R返回:
Error in if (x == 0) { : missing value where TRUE/FALSE needed
并停止循环。
我每次都在其中一个文件上遇到这个问题...... 我检查了一切,我不知道,我能做错什么。请帮我。我只使用了R几个星期...但我检查了每个提示,我在网上找到了......
也许你也可以告诉我,如何写(在我的情况下)我的文件同名,但f.e.在不同的目录? 非常感谢你! 安娜
答案 0 :(得分:0)
您收到错误beacuase x是缺失值,您尝试将其与数字进行比较。重现错误。
x <- NA
if(x==0)cat(x)
Error in if (x == 0) cat(x) : missing value where TRUE/FALSE needed
所以这样可以解决问题:
if(x==0 || is.na(x))cat(x)
但是这里有一些关于你非常糟糕的代码的评论:
for
。请改用lapply
。例如我会写这样的东西:
lapply(ff in myfiles){
thisfile <- read.csv(ff, header = T, sep=";",
na.string="NA", comment.char="")
lapply(thisfile,function(col){
x = sd(col, na.rm=T)
y = length (na.omit(col))
if (y == 0) { ## do something here
} else if (is.na(x) || x == 0) { ## do something here
else { ## do something here
}
}