【问题标题】:Error in sample.int(length(x), size, replace, prob) : invalid first argumentsample.int(length(x), size, replace, prob) 中的错误:第一个参数无效
【发布时间】:2015-03-28 01:47:56
【问题描述】:

我正在运行以下代码行并面临上述错误。任何想法如何解决这一问题 ?

install.packages("operator.tools")    
X <- NULL
S <- NULL
remove.valuex <- NULL
N <- seq.int(1,25)

library(operator.tools)

repeat {

S<-sample(N ,1, replace = FALSE, prob = NULL)
S
if (S==1) {
remove.value<-c(S,S+1)
} else if (S==25) {
remove.value<-c(S,S-1)
}else {remove.value<-c(S-1,S,S+1)
}
remove.value

N <- N [which(N %!in% remove.value)]          
N

if (is.null(N)) break
}

【问题讨论】:

  • length(x) 本身能给你带来什么?
  • 你的总体目标是什么?
  • length(N) 是大多数运行 22,听起来不错,偶尔是 23。
  • 目标:我有一个从 0 到 25(N)的 int 向量,我想选择向量的一个成员并消除其相邻值,然后只要我做不到就重复此操作.
  • 您似乎没有存储删除值的序列,所以我猜这对您来说并不重要,但如果您将 if (is.null(N)) break 更改为 if(length(N)&lt;1) break 您不会得到一个错误。

标签: r random sample


【解决方案1】:

它实际上按您的意愿工作。插入print(N)就可以看到了

> repeat{

    S<-sample(N ,1, replace = FALSE, prob = NULL)
    S
    if (S==1) {
        remove.value<-c(S,S+1)
    } else if (S==25) {
        remove.value<-c(S,S-1)
    }else {remove.value<-c(S-1,S,S+1)
    }
    remove.value

    N <- N [which(N %!in% remove.value)]          
    print(N)

    if (is.null(N)) break
}
 [1]  1  2  3  4  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 [1]  1  2  3  4  8  9 10 11 12 13 14 15 16 17 18 19 20 21 25
 [1]  1  2  3  4  8  9 13 14 15 16 17 18 19 20 21 25
 [1]  1  2  3  4  8  9 13 14 15 16 17 18 25
 [1]  1  2  3  4  8  9 16 17 18 25
[1]  1  2  3  4  8  9 25
[1]  1  2  8  9 25
[1]  8  9 25
[1] 8 9
integer(0)
Error in sample.int(length(x), size, replace, prob) : 
  invalid first argument

错误是由N的最终值导致的,即integer(0),而不是NULL。如果您使用if (length(N)== 0) break 而不是if (is.null(N)) break,则代码可以正常工作而不会出现错误消息。

【讨论】:

  • 我看到 R studio 的行为不一致。尽管尝试使用 RStudent 的建议,我仍然看到错误: X
  • 我也在使用 RStudio,它对我有用。你得到同样的错误吗?
  • 是的,同样的错误,但时不时地取决于我猜的随机样本。
  • 我遇到了同样的错误。对我来说最大的困惑是错误消息提到了sample.int,而我使用的是sample。所以看起来要么它只是一个草率的错误消息,要么 RStudio 试图使用错误的函数。
【解决方案2】:

删除库 Tidyverse 为我解决了这个问题。问题似乎是 RStudio 调用 sample.int() 而不是简单的 sample()。干杯!

【讨论】:

  • 同样的问题,这对我没有帮助。此外, sample.int() 是 baseR
【解决方案3】:

我也在一个完全不同的环境中苦苦挣扎。我认为@DatamineR 的答案是正确的。您可以通过尝试看到这一点:

sample(NULL, 1)
sample(integer(0), 1)

你在哪里得到同样的错误信息:

Error in sample.int(length(x), size, replace, prob) : 
  invalid first argument

我仍然觉得这非常具有误导性,因为我们都没有调用 sample.int() ;) 不会使调试更容易。但至少对我来说,这就是问题所在,我们实际上试图从无到有。

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多