楼主: wowsfsf
31715 5

[问答] R if循环里老是missing value where TRUE/FALSE needed [推广有奖]

  • 0关注
  • 0粉丝

小学生

50%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0.0009
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
56 点
帖子
5
精华
0
在线时间
3 小时
注册时间
2013-4-18
最后登录
2016-5-31

楼主
wowsfsf 发表于 2015-4-15 15:39:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我就试试一下简单的函数
create<- function(x,y)
{
layer <- raster(n4)
layer2 <- raster(n3)
   for(c in 1:x)
  {
    for(r in 1:y)
   {
      if(layer[c,r]==0)
     {
       nl<- layer2
       nl[c,r]<-NA
       writeRaster(nl, "cloud.tif")
     }
     else
     { layer[c,r]=layer2[c,r]}
   }
  }
}create(10,10)

但一运行就显示Error in if (layer[c, r] == 0) { : missing value where TRUE/FALSE needed

二维码

扫码加我 拉你入群

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

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

关键词:missing NEEDED Where value alue needed where

沙发
wangluan 发表于 2015-4-15 16:01:40
这个函数只传入了两个参数x,y
那么layer <- raster(n4)中的参数n4没有定义,故layer的定义就无效
已有 1 人评分经验 收起 理由
李会超 + 60 热心帮助其他会员

总评分: 经验 + 60   查看全部评分

藤椅
wowsfsf 发表于 2015-4-15 23:20:51
wangluan 发表于 2015-4-15 16:01
这个函数只传入了两个参数x,y
那么layer
setwd("E:/Landsat-data-NASA atm-corrected/sample_day1")
restdir2 <- ("E:/Landsat-data-NASA atm-corrected/sample_day1")
  n3 <- list.files(restdir2, pattern="*band4_clip_1.tif", full.names=TRUE)
  n4 <- list.files(restdir2, pattern="*cloud_qa_clip_1.tif", full.names=TRUE)

板凳
wangluan 发表于 2015-4-16 00:45:17
你首先要测试的是下面这段有没有问题,然后在封装成函数
x=10;y=10;
layer <- raster(n4)
layer2 <- raster(n3)
   for(c in 1:x)
  {
    for(r in 1:y)
   {
      if(layer[c,r]==0)
     {
       nl<- layer2
       nl[c,r]<-NA
       writeRaster(nl, "cloud.tif")
     }
     else
     { layer[c,r]=layer2[c,r]}
   }
  }
你给出的报错原因一般是因为layer[c,r]为NA
例如
> a=NA;if(a==0){}
Error in if (a == 0) { : missing value where TRUE/FALSE needed


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
谒帝伫非赊2 + 1 + 1 + 1 观点有启发

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

报纸
wowsfsf 发表于 2015-4-16 08:25:22
wangluan 发表于 2015-4-16 00:45
你首先要测试的是下面这段有没有问题,然后在封装成函数
x=10;y=10;
layer
·你好 我现在是想处理两张地图
这两张地图属于同一区域 坐标都一样
不同的是 第一张地图显示云彩 第二张没有
在第一张地图 pixel值为0的grid代表有云彩
现在我要做的是写一个function来找到第一章图内pixel值为0的grid的坐标(行数,列数)
然后在第二张图内相同坐标的grid值改为NA
所以我想写一个if loop来检测
但是我发现if loop一旦测到不为0的值就会报错
请问有其他办法不用if while loop来查找值为0的grid坐标的方法吗
谢谢

地板
wangluan 发表于 2015-4-16 21:54:09
wowsfsf 发表于 2015-4-16 08:25
·你好 我现在是想处理两张地图
这两张地图属于同一区域 坐标都一样
不同的是 第一张地图显示云彩 第二 ...
我不是很清楚你要做的全部内容,但我能给你写一个示例:查找所有等于0的数据的坐标,如下

> x <- data.frame(x1=c(0,NA,1,2,3,4,0,5),x2=c(0,NA,NA,2,0,4,0,5))
> x
  x1 x2
1  0  0
2 NA NA
3  1 NA
4  2  2
5  3  0
6  4  4
7  0  0
8  5  5
> # 将x按列转换为向量,找到所有值为0的序号
> list <- which(x==0)
> list
[1]  1  7  9 13 15
> # 所有值为0的序号转换为横纵坐标
> axes <- as.matrix(data.frame(x = list %% dim(x)[1], y = list %/% dim(x)[1] + 1))
> axes
     x y
[1,] 1 1
[2,] 7 1
[3,] 1 2
[4,] 5 2
[5,] 7 2
> #检验这些坐标代表的数据值是否为0
> x[axes]
[1] 0 0 0 0 0

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

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