R错误:"在数值表达式中有19个元素:只有第一个使用"

时间:2014-04-19 18:26:43

标签: r decision-tree

我创建了一个数据框:

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

基本上计算测试数据帧中TermDeposit金额的累计和并将其存储在总存款中。这很好用。

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

avgDeposit <- totalDeposit / (1:testd)

但收到错误消息

   Error in 1:testd : NA/NaN argument
In addition: Warning message:
In 1:testd : numerical expression has 19 elements: only the first used

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

有人可以帮我解决这个问题吗?我试图在网上找到这个错误信息,但到目前为止我所知道的是1:testd基本上使R读取测试为一个它不是的数字,因此我得到一条错误信息。简单地采用mean(totalDeposit)就可以了吗?我试过了,但我得到的数字是荒谬的,没有代表平均值。

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

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

当你说1:N时,你告诉R的是&#34;给我1和N&#34;之间的整数序列。它是从integer1到integer2。 testd不是整数,它是(最多)整数的整数向量,因此在计算序列时,R除了testd中的第一个值之外的所有值。替代方案可能是一个可怕的错误或序列的 - 一个介于1和testd中的第一个值之间,另一个介于1和testd中的第二个值之间。等等。

如果testd是数据框,则您需要的是1:nrow(testd),如果它是列表或向量,则为1:length(testd)seq_along(testd)

但基于这个问题 - 是否需要计算平均值? - 你实际上是在接近这个错误,因为你不想要一系列的价值观,你只需要一个:因为平均值=总数/进入总数的元素数量,你只需要&#39;元素的数量&#39; - 只需nrow(testd)即可检索。

答案 1 :(得分:1)

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

avgDeposit <- totalDeposit / 1:nrow(testd)

...虽然我承认这似乎没有用。至少它不会抛出错误。