【问题标题】:is.null returns false despite fo being TRUE in R尽管 fo 在 R 中为 TRUE,但 is.null 返回 false
【发布时间】:2021-09-01 09:42:37
【问题描述】:

我有一个变量:

x$value
[[1]]
NULL

但是当我运行is.null(x$value) 时,我得到:

is.null(x$value)
[1] FALSE

这怎么可能?我怎样才能解决这个问题?我在sum(sapply((data$iteration), FUN = function(x) {ifelse(is.null(x$value), 0, x$value)}), na.rm = TRUE) 中使用它时出现错误:

Error in sum(sapply((data$iteration), FUN = function(x) { : 
  invalid 'type' (list) of argument

【问题讨论】:

    标签: r null lapply sapply


    【解决方案1】:

    问题在于x$value 是一个包含NULL 元素的列表,因此x$value 不是NULL。您需要使用x$value[[1]] 访问此列表,然后您会发现is.null(x$value[[1]]) 是TRUE。

    【讨论】:

    • 但我使用的是 sapply,它接受列表输入。我不明白的是为什么我在 thn sapply 中遇到错误?
    • 它真的将列表作为输入还是列表的列表?错误似乎是在说后者是这种情况。你能提供可重复的数据吗?
    • 列表列表,没错。我基本上想用 0 替换 NULL
    • @Nneka 您需要在sapply 语句中更新匿名函数(FUN 的参数)。处理x(lists 中的list)时,您的匿名函数必须“查看内部”x 的第一个元素 $value(list),然后查看内部$value对于它的第一项[[1]](这里是NULL)。像这样:function(x) {ifelse(is.null(x$value[[1]]), 0, ...})。接下来会发生什么(在我的... 中)将取决于您希望对带有嵌套NULL 的x 发生什么。
    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多