【问题标题】:R in BERT won't use na.rm=TRUE in sum functionBERT 中的 R 不会在 sum 函数中使用 na.rm=TRUE
【发布时间】:2018-02-13 18:09:49
【问题描述】:

我安装了 BERT(R 语言到 Excel 界面)。在包含的functions.R文件中,我修改了包含的Add函数以使用na.rm参数,如下所示。

Add <- function( ... ) {
  sum(..., na.rm=TRUE);
}

但是,na.rm 参数似乎被忽略了。也就是说,如果范围内的所有值都存在,则 Add() 函数在 Excel 中可以正常工作。 [如果所有单元格 A1:A5 都包含值,则 Excel 中的 =R.Add(A1:A5) 可以正常工作] 但是,如果我删除范围内的任何值(因此 Excel 单元格为空白),我会得到 #NULL!返回。

是否可以利用 na.rm 参数,使用 BERT,以便对于具有 na.rm 参数的 R 语言函数,它被考虑在内,并且 Excel 范围内的空白单元格仍然计算剩余值和不返回#NULL!?

【问题讨论】:

    标签: r excel bert-toolkit


    【解决方案1】:

    这有点复杂,因为如果您传入一个参数(范围)或多个参数(单个单元格),行为会有所不同。但是在单个参数的情况下,如果您传入一个包含空单元格的范围,这将作为一个列表传递。在这种情况下,您需要致电unlist,例如

    Add <- function( ... ) {
      sum(unlist(...), na.rm=TRUE);
    }
    

    Excel 可以具有包含不同类型(例如字符串和数字)的范围,但 R 不能。因此,当 BERT 将数据从 Excel 传递到具有混合类型的 R 时,它会使用列表列表。

    在控制台运行时有一个提示,这是一个很好的起点——它说参数是无效类型(列表)。

    正如我所说,这很复杂,因为三点参数可以引用多个参数,每个参数可以是列表或单个值(标量),每个参数都可以是不同的类型。在这种情况下,您需要使用 apply 函数之一来取消列出不同的参数。但是先试试上面的。

    【讨论】:

    • 谢谢。是的,这解决了这个问题。我主要提出这个问题是为了尝试从中学习,一般来说,如何处理 na.rm。听起来 R Excel 之间的处理会根据特定的 R 函数而有所不同。
    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 2018-05-24
    • 2018-11-18
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多