為什麼我的代碼得到不同的結果?

蘋果派

我想弄清楚一副套牌中有多少張牌是花色黑桃或偶數,但我不明白為什麼根據我編寫最後一段代碼的方式會得到不同的答案。我想得到的答案是 31。

Suits <- c("Diamonds", "Clubs", "Hearts", "Spades") 
Value <- 1:13

Deck <- expand.grid(Value = Value, Suits = Suits) 
Deck$Cards <- paste(Deck$Suits, Deck$Value)

Hearts <- subset(Deck, Suits == "Hearts", "Cards")
Nines <- subset(Deck, Value == 9, "Cards")


Spades <- subset(Deck, Suits == "Spades", "Cards")
Even_Value <- subset(Deck, Value %% 2 == 0, "Cards") 
length(union(Spades, Even_Value))

Spades <- Deck[Deck$Suits == "Spades", "Cards"]
Even_Value <- Deck[Deck$Value %% 2 == 0, "Cards"]
length(union(Spades, Even_Value))
艾倫卡梅倫

subset函數返回一個具有單列的數據框,而表達式Deck[Deck$Suits == "Spades", "Cards"]返回一個向量。這些不是一回事。特別是,當您嘗試執行union兩個數據幀中的一個時,您將不會得到一個向量,而是一個列表,每個數據幀中的每一列都有一個條目。

Spades <- subset(Deck, Suits == "Spades", "Cards")
Even_Value <- subset(Deck, Value %% 2 == 0, "Cards") 
union(Spades, Even_Value)
#> [[1]]
#>  [1] "Spades 1"  "Spades 2"  "Spades 3"  "Spades 4"  "Spades 5"  "Spades 6"  "Spades 7" 
#>  [8] "Spades 8"  "Spades 9"  "Spades 10" "Spades 11" "Spades 12" "Spades 13"
#>
#> [[2]]
#>  [1] "Diamonds 2"  "Diamonds 4"  "Diamonds 6"  "Diamonds 8"  "Diamonds 10" "Diamonds 12"
#>  [7] "Clubs 2"     "Clubs 4"     "Clubs 6"     "Clubs 8"     "Clubs 10"    "Clubs 12"   
#> [13] "Hearts 2"    "Hearts 4"    "Hearts 6"    "Hearts 8"    "Hearts 10"   "Hearts 12"  
#> [19] "Spades 2"    "Spades 4"    "Spades 6"    "Spades 8"    "Spades 10"   "Spades 12"

由於您傳遞了兩個數據幀,每個數據幀都有一列,因此結果列表中有 2 * 1 = 2 個向量,因此它是一個長度為 2 的列表。

同樣,如果你做了一個union內置數據集irisand mtcars,你會得到一個包含 16 個向量的列表(來自 的所有 5 列iris來自 的所有 11 列mtcars):

ncol(mtcars)
#> [1] 11
ncol(iris)
#> [1] 5
length(union(mtcars, iris))
#> [1] 16

但是,第二個版本執行兩個向量的並集而不是兩個數據幀,並且union這兩個向量的 將是正確的:

Spades <- Deck[Deck$Suits == "Spades", "Cards"]
Even_Value <- Deck[Deck$Value %% 2 == 0, "Cards"]
union(Spades, Even_Value)
#>  [1] "Spades 1"    "Spades 2"    "Spades 3"    "Spades 4"    "Spades 5"    "Spades 6"   
#>  [7] "Spades 7"    "Spades 8"    "Spades 9"    "Spades 10"   "Spades 11"   "Spades 12"  
#> [13] "Spades 13"   "Diamonds 2"  "Diamonds 4"  "Diamonds 6"  "Diamonds 8"  "Diamonds 10"
#> [19] "Diamonds 12" "Clubs 2"     "Clubs 4"     "Clubs 6"     "Clubs 8"     "Clubs 10"   
#> [25] "Clubs 12"    "Hearts 2"    "Hearts 4"    "Hearts 6"    "Hearts 8"    "Hearts 10"  
#> [31] "Hearts 12"

為了讓第一個版本的工作,你必須從中選擇您想使工會(每種情況下的數據幀的列,它是唯一的列- Cards但仍需要進行選擇,以獲得向量的數據框架而不是數據框架本身)

Spades <- subset(Deck, Suits == "Spades", "Cards")
Even_Value <- subset(Deck, Value %% 2 == 0, "Cards") 
length(union(Spades$Cards, Even_Value$Cards))
#> [1] 31

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

為什麼這些代碼片段的行為不同?

為什麼我的函數返回 0.0?(C 代碼)

代碼拋出錯誤,寫在結束後但為什麼

為什麼下面代碼中的結果是 1?四捨五入什麼時候發生?

為什麼我的 javascript 代碼沒有按預期工作

為什麼 Visual Studio 代碼無法識別我安裝了 Pygame?

為什麼在我的 Go 代碼中忽略 MinVersion 標誌?

為什麼我的 for 循環後的代碼被忽略?

為什麼我用 toString() 得到相同的結果,但用 getClass().getName() 得到不同的結果

為什麼我的並行代碼比沒有並行更慢

為什麼我的代碼在使用 Math.random() 時只得到全部正面或全部反面?

為什麼我只能得到谷歌地圖(抓取)的第 6 個結果?

有誰知道為什麼我沒有得到輸出,代碼確實編譯但不返回任何輸出

為什麼我得到錯誤的結果?

為什麼我的反向鍊錶代碼只返回第一個節點?

將 MATLAB 代碼轉換為 Python 後,我得到了不同的結果

我在抓取時做錯了什麼。不為我的代碼返回任何值

這段代碼得到一個錯誤,這些變量沒有被分配到,我不知道為什麼

為什麼我得到 QJsonValue(undefined)?

為什麼我的 Javascript 代碼返回對像對象?

為什麼在運行我的 discord.py 代碼時出現錯誤?

為什麼我在 Flutter 代碼中看不到“print()”語句的結果?

為什麼我的代碼會針對此問題返回錯誤?

為什麼我的代碼顯示超出時間限制?

為什麼我的代碼不生成沒有 str 的隨機數?

我認為代碼是相同的,但我不知道為什麼它會產生不同的結果

為什麼 document.getElementById() 命令對我的代碼不起作用?

為什麼我的代碼似乎在 Interaction.editReply() 處停止?

為什麼我的代碼沒有增加計數?