[英]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.