【问题标题】:R for loop gives: Error in if (is.na(x)) return(0) else return(sign(x)) : argument is of length zeroR for 循环给出: if (is.na(x)) return(0) else return(sign(x)) 中的错误:参数长度为零
【发布时间】:2018-08-07 12:08:12
【问题描述】:

我正在遍历一个大型数据集并隔离了一些返回错误的组:

if (is.na(x)) return(0) else return(sign(x)) 中的错误: 参数长度为零

其他帖子表明这表明存在 NULL。不过,

is.null(block_of_troublesome_data) [1] 错误

手动检查 df 也不显示任何 na 值(这是有道理的,因为我之前在整个块上运行了 na.omit()。

我错过了什么?

附加信息:这是循环正在处理的 df:

数据

小标题:120 x 11

组:ecoregion_code [1]

ecoregion_code loc_major_basin lake_id lake_name sample_date y m doy value_ft season_code season 1 40 7010103 01-0022-00 岛 1999-07-29 1999 7 210 5.610236 2 夏季 2 40 7010103 01-0022-00 ISLAND 2000-06-18 2000 6 170 6.496063 1 弹簧 3 40 7010103 01-0022-00 岛 2000-07-04 2000 7 186 6.496063 2 夏季 4 40 7010103 01-0022-00 岛 2000-08-12 2000 8 225 6.496063 2 夏季 5 40 7010103 01-0022-00 岛 2000-08-26 2000 8 239 6.496063 2 夏季 6 40 7010103 01-0022-00 岛 2000-09-16 2000 9 260 6.496063 3 秋季 7 40 7010103 01-0022-00 ISLAND 2001-06-03 2001 6 154 5.511811 1 弹簧 8 40 7010103 01-0022-00 ISLAND 2001-06-10 2001 6 161 5.511811 1 弹簧 9 40 7010103 01-0022-00 ISLAND 2001-06-17 2001 6 168 4.986877 1 弹簧 10 40 7010103 01-0022-00 ISLAND 2001-10-18 2001 10 291 6.496063 3 秋季

...还有 110 行

和'if (is.na(x)) return(0) else return(sign(x))'的输出

if (is.na(data)) return(0) else return(sign(data)) Math.data.frame(data) 中的错误: 数据框中的非数字变量:lake_idlake_namesample_dateseason 另外:警告信息: 在 if (is.na(data)) return(0) else return(sign(data)) 中: 条件的长度 > 1,并且只使用第一个元素

if (length(data)==0) 0 else if is.na(x) 0 else sign(data) 错误:“if (length(data)==0) 0 else if is.na”中出现意外符号

【问题讨论】:

  • 您可以发布示例数据吗?请使用dput(x) 的输出编辑问题。或者,如果 dput(head(x, 20)) 的输出太大。

标签: r for-loop null na


【解决方案1】:

所有零长度向量都不是NULL,因此您可能需要测试length(x)

# instead of ...
if (is.na(x)) return(0) else return(sign(x))
# try ...
if (length(x)==0) 0 else if is.na(x) 0 else sign(x)
# or equivalently ...
if(length(foo)==0 || is.na(foo)) 0 else sign(foo)

(你可能需要也可能不需要return(...),这是另一个问题。)

一个测试用例:

foo <- numeric(0)
is.null(foo) # FALSE
if(length(foo)==0) 0 else if(is.na(foo)) 0 else sign(foo)  # 0
if(length(foo)==0 || is.na(foo)) 0 else sign(foo)  # 0

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2012-06-03
    • 2014-11-20
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多