簡體   English   中英

串聯R向量中的NA值

[英]NA values in concatenated R vectors

考慮以下代碼

MyClass <- setRefClass("MyClass",

                          fields = list(body = "vector"),

                          methods = list(
                            initialize = function(length){
                              body <<- sample(-100:100, length) / 100
                            }
                          )
)

myFunction <- function(classA, classB){
    cut <- sample(1:length(classA$body), 1)
    new.bodyA <- c(classA$body[1:cut], classB$body[cut+1:length(classB$body)])
    new.bodyB <- c(classB$body[1:cut], classA$body[cut+1:length(classA$body)])
    classA$body <- new.bodyA
    classB$body <- new.bodyB
    return(list(classA, classB))
}

a <- MyClass$new(10)
b <- MyClass$new(10)

myFunction(a, b)

我正在嘗試實現的是兩個新向量,它們基於隨機元素索引將兩個給定向量的元素組合在一起。

我不確定發生了什么,但是當我運行此命令時,新的向量將包含NA值:

[[1]]
Reference class object of class "MyClass"
Field "body":
 [1]  0.50 -0.67  0.69 -0.43  0.12 -0.82  0.76  0.72 -0.02 -0.31    NA    NA    NA    NA    NA    NA    NA

[[2]]
Reference class object of class "MyClass"
Field "body":
 [1]  0.18  0.41  0.11  0.14  0.52 -0.67 -0.30 -0.85 -0.45  0.33    NA    NA    NA    NA    NA    NA    NA

我不確定為什么會發生這種情況-該功能可以正常工作,但我不知道如何避免NA值。 有人可以解釋為什么會這樣,並提出解決方法嗎?

非常感謝

我很確定代碼中的問題是您使用時

cut+1:length(classB$body)

而您應該使用:

(cut+1):length(classB$body)

這些不是同一件事,因為:運算符的優先級比二進制+更高(有關運算符優先級的詳細信息,請參見?Syntax )。 你自己看:

2+1:6
# [1] 3 4 5 6 7 8
2+(1:6)
# [1] 3 4 5 6 7 8
(2+1):6
# [1] 3 4 5 6
 a = c(1,2,3,4,5)
 b = c(6,7,8,9,10)

 concat_a_wrong = c(a[1:3],b[3+1:length(b)])
 concat_a_correct  = c(a[1:3],b[(3+1):length(b)])



 >>concat_a_wrong 
 1  2  3  9 10 NA NA NA
 >>concat_a_correct  
 1  2  3  9 10

在錯誤的情況下,您將剪切添加到范圍為1:length的每個項目中,因此實際上您在b數組中超出了邊界(NA)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM