sample.int中的错误(长度(x),大小,替换,概率):第一个参数无效

时间:2015-01-28 23:36:24

标签: r random sample

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

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
}

3 个答案:

答案 0 :(得分:2)

它实际上按照您的意图运作。如果您插入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,则代码可以正常运行。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

foodie = foodie.rename(columns={
    'questions_135557_how_old_are_you': 'Age',
    'questions_134999_where_are_you_eating_at_the_moment': 'Location'
})

您收到相同错误消息的地方:

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

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