R programming, Ifelse Error: "Error in ifelse(i %in% c(1, 6), rasterImage(ringIMG2, -22, -22, 22, 22, : replacement has length zero: "
R programming, Ifelse Error: "Error in ifelse(i %in% c(1, 6), rasterImage(ringIMG2, -22, -22, 22, 22, : replacement has length zero: "
我正在尝试 运行 基于 i 的值在 for 循环中使用同一命令的不同版本。
如果 i 等于 1 或 6 运行 则:
rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, 角度=0)
如果 i 等于 2、3 或 5 运行 则:
rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, 角度=0)
如果我等于 4 运行 这个:
rasterImage(ringIMG2, -23.5, -23.5, 23.5, 23.5, interpolate=FALSE, 角度=0)
我正在使用嵌套的 ifelse 语句。
for (i in 1:6)
{
#adjusts size of image within the plot
ifelse(i %in% c(1,6), rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, angle =0),
ifelse(i %in% c(2,3,5), rasterImage(ringIMG2, -23, -23, 23, 23, interpolate=FALSE, angle =0),
rasterImage(ringIMG2, -23.5, -23.5, 23.5, 23.5, interpolate=FALSE, angle =0)
)
)
}
我不断收到以下错误:
Error in ifelse(i %in% c(1, 6), rasterImage(ringIMG2, -22, -22, 22, 22, :
replacement has length zero
In addition: Warning messages:
1: In readPNG(paste0("R", i, ".png")) :
libpng warning: iCCP: known incorrect sRGB profile
2: In rep(yes, length.out = length(ans)) :
'x' is NULL so the result will be NULL
代码本身是 运行宁好的:
rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, angle =0)
好吧,我仍然收到第一个警告,但这不是真正的问题。
我试过简化,它似乎工作...
check <- ifelse(i %in% c(1,6), print('Yes'))
[1] "Yes"
根据下面的 link,我的语法看起来不错:
Nested ifelse syntax
ifelse(<condition>, <yes>,
ifelse(<condition>, <yes>, <no>)
)
)
有人知道我哪里出错了吗?
谢谢!
您想使用 if
和 else
— 不要与 ifelse()
混淆。
ifelse()
在您想要基于条件向量创建值向量时很有用。它 return 是一个与测试条件长度相同的向量,并期望所有参数的长度相同。但是 rasterImage()
没有 return 值——将其作为参数传递给 ifelse()
等同于传递 NULL
。 length(i) != length(NULL)
,所以你得到一个错误。
但是 if
和 else
是标准的控制流语句,而不是具有规定输入和输出的函数,因此更适合您的情况:
for (i in 1:6) {
if (i %in% c(1,6)) {
rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, angle =0)
} else if (i %in% c(2,3,5)) {
rasterImage(ringIMG2, -23, -23, 23, 23, interpolate=FALSE, angle =0)
} else {
rasterImage(ringIMG2, -23.5, -23.5, 23.5, 23.5, interpolate=FALSE, angle =0)
}
}
您也可以在没有 if
语句的情况下更简洁地完成此操作:
for (i in c(22, 23, 23, 23.5, 23, 22)) {
rasterImage(ringIMG2, -i, -i, i, i, interpolate=FALSE, angle =0)
}
我正在尝试 运行 基于 i 的值在 for 循环中使用同一命令的不同版本。
如果 i 等于 1 或 6 运行 则: rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, 角度=0)
如果 i 等于 2、3 或 5 运行 则: rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, 角度=0)
如果我等于 4 运行 这个: rasterImage(ringIMG2, -23.5, -23.5, 23.5, 23.5, interpolate=FALSE, 角度=0)
我正在使用嵌套的 ifelse 语句。
for (i in 1:6)
{
#adjusts size of image within the plot
ifelse(i %in% c(1,6), rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, angle =0),
ifelse(i %in% c(2,3,5), rasterImage(ringIMG2, -23, -23, 23, 23, interpolate=FALSE, angle =0),
rasterImage(ringIMG2, -23.5, -23.5, 23.5, 23.5, interpolate=FALSE, angle =0)
)
)
}
我不断收到以下错误:
Error in ifelse(i %in% c(1, 6), rasterImage(ringIMG2, -22, -22, 22, 22, :
replacement has length zero
In addition: Warning messages:
1: In readPNG(paste0("R", i, ".png")) :
libpng warning: iCCP: known incorrect sRGB profile
2: In rep(yes, length.out = length(ans)) :
'x' is NULL so the result will be NULL
代码本身是 运行宁好的:
rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, angle =0)
好吧,我仍然收到第一个警告,但这不是真正的问题。
我试过简化,它似乎工作...
check <- ifelse(i %in% c(1,6), print('Yes'))
[1] "Yes"
根据下面的 link,我的语法看起来不错:
Nested ifelse syntax
ifelse(<condition>, <yes>,
ifelse(<condition>, <yes>, <no>)
)
)
有人知道我哪里出错了吗?
谢谢!
您想使用 if
和 else
— 不要与 ifelse()
混淆。
ifelse()
在您想要基于条件向量创建值向量时很有用。它 return 是一个与测试条件长度相同的向量,并期望所有参数的长度相同。但是 rasterImage()
没有 return 值——将其作为参数传递给 ifelse()
等同于传递 NULL
。 length(i) != length(NULL)
,所以你得到一个错误。
但是 if
和 else
是标准的控制流语句,而不是具有规定输入和输出的函数,因此更适合您的情况:
for (i in 1:6) {
if (i %in% c(1,6)) {
rasterImage(ringIMG2, -22, -22, 22, 22, interpolate=FALSE, angle =0)
} else if (i %in% c(2,3,5)) {
rasterImage(ringIMG2, -23, -23, 23, 23, interpolate=FALSE, angle =0)
} else {
rasterImage(ringIMG2, -23.5, -23.5, 23.5, 23.5, interpolate=FALSE, angle =0)
}
}
您也可以在没有 if
语句的情况下更简洁地完成此操作:
for (i in c(22, 23, 23, 23.5, 23, 22)) {
rasterImage(ringIMG2, -i, -i, i, i, interpolate=FALSE, angle =0)
}