【问题标题】:R Error: "In numerical expression has 19 elements: only the first used"R错误:“在数值表达式中有19个元素:只使用第一个”
【发布时间】:2014-06-04 03:01:25
【问题描述】:

我创建了一个数据框:

totalDeposit <- cumsum(testd$TermDepositAMT[s1$ix])

这基本上是计算testd数据帧中TermDeposit数量的累积总和并将其存储在totalDeposit中。这完全没问题。

然后我需要计算存款金额的平均值,我使用以下代码:

avgDeposit <- totalDeposit / (1:testd)

但我收到一条错误消息:

1:testd 中的错误:NA/NaN 参数
另外:警告信息:
在 1:testd 中:数值表达式有 19 个元素:只使用第一个

testd 有大约 8000 个观察值和 19 个变量。

有人可以帮我解决这个问题吗?我试图在线查找此错误消息,但到目前为止我所了解的是 1:testd 基本上使 R 将 testd 读取为一个数字,但它不是,因此我收到一条错误消息。只需使用mean(totalDeposit) 就可以解决问题吗?我试过了,但我得到的数字很荒谬,无法代表平均水平。

感谢您的帮助。

【问题讨论】:

  • 您似乎也缺少一些数据。
  • 表达式 `a:b` 要求 ab 都是标量(即单个元素)。您的testd 不止一个。你可能想要totalDeposit/(1:length(totalDeposit))
  • 谢谢。我尝试了您和 Ironholds 的响应,它们的输出相似。

标签: r decision-tree


【解决方案1】:

在这种情况下,错误消息很有帮助。

当你说1:N 时,你告诉 R 的是“给我 1 到 N 之间的整数序列”。它是从整数 1 到整数 2。 testd 不是整数,它(充其量)是整个整数向量,因此 R 在计算序列时会处理除 testd 中的第一个值之外的所有值。另一种选择可能是一个可怕的错误或一个 set 序列 - 一个介于 1 和 testd 中的第一个值之间,另一个介于 1 和 testd 中的第二个值之间......等等.

你想要的是1:nrow(testd),如果testd是一个数据框,或者1:length(testd)seq_along(testd)如果它是一个列表或向量。

不过,基于问题 - 需要计算平均值吗? - 你实际上是在接近这个错误,因为你不想要一个值序列,你只想要一个:因为平均值 = 总数/进入该总数的元素数,你只想要“元素数” - 其中只需使用nrow(testd) 即可检索。

【讨论】:

  • 谢谢。我还尝试简单地除以 nrow(testd),当然它们获得的值不同于 1:nrow(testd)。您能否帮助我从概念上理解 R 对 1:nrow(testd) 的作用,而不是 nrow(testd)。非常感谢
  • nrow(testd) 是单个数字,而 1:nrow(testd) 是从 1 开始的数字序列。
  • BondedDust 所说的。 1:nrow(testd) 最好理解为“给我介于 1 和 testd 中的行数之间的所有数字,包括在内”。因此,如果 testd 有 5 行,则为 1、2、3、4、5。 3:nrow(testd) 将是 3,4,5。因此,除以 nrow(testd) 只是除以行数。除以 1:nrow(testd) 是除以每个整数,依次在 1 和行数之间。
  • @user3007275:查看我上面的修改答案; nrow(testd) 是你想要的,如果你正在计算一个平均值。
  • 再次感谢,我试图预测每个观察(客户)的平均存款金额,所以我觉得这个想法是对每一行进行平均,这就是 1:nrow(testd) 将实现的与 nrow(testd) 相反,它只会获得一个整体价值。我正在关注一本书以寻找有关编码的一些帮助,这本书有类似的代码,但我不太明白他们想要做什么。现在更有意义了。
【解决方案2】:

很明显testd 是一个数据框或列表,因为您没有收到来自testd$ 的错误。如果你有一个testd,其中第一个元素是一个数字,但它比一个元素长,你只会得到一个警告。你可能想写:

avgDeposit <- totalDeposit / 1:nrow(testd)

...虽然我承认这似乎不是很有用。至少不会报错。

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 1970-01-01
    • 2021-08-17
    • 2020-06-15
    • 1970-01-01
    • 2016-01-08
    • 2018-08-21
    • 2021-11-29
    • 2018-09-16
    相关资源
    最近更新 更多