我有兩個向量:
a = strsplit("po","")[[1]]
[1] "p" "o"
b = strsplit("polo","")[[1]]
[1] "p" "o" "l" "o"
我正在嘗試使用==. 不幸的是,a==b給出了一個意想不到的結果。
a==b
[1] TRUE TRUE FALSE TRUE
雖然我希望有:
[1] TRUE TRUE FALSE FALSE
那么,這是什么原因造成的呢?怎樣才能達到預期的效果?
這個問題似乎是相關的事實,兩個向量的最后一個元素是一樣的改變b,以如polf沒有得到預期的結果,也因為設定b來pooo給TRUE TRUE FALSE TRUE,而不是TRUE TRUE TRUE TRUE。
編輯
換句話說,我希望丟失的元素(當長度不同時)作為空傳遞(""似乎只給出TRUE TRUE FALSE FALSE,NA并NULL給出不同的結果)。
c("p","o","","")==c("p","o","l","o")
[1] TRUE TRUE FALSE FALSE
uj5u.com熱心網友回復:
您在這里遇到的問題是由于回收(不是環保型的)。當對兩個要求它們長度相同的向量進行運算時,R 通常會自動回圈或重復較短的向量,直到它足夠長以匹配較長的向量。您意外的結果是由于 R 將向量回收c("p", "o")為長度 4(較大向量的長度)并基本上將其轉換為c("p", "o", "p", "o"). 如果我們比較c("p", "o", "p", "o"),c("p", "o", "l", "o")我們可以看到我們得到了上面意想不到的結果:
c("p", "o", "p", "o") == c("p", "o", "l", "o")
#> [1] TRUE TRUE FALSE TRUE
我不太清楚為什么你會期望結果是TRUE TRUE FALSE FALSE,因為將長度為 2 的向量與長度為 4 的向量進行比較,并回收長度為 2 的向量(這就是 R 正在做的)有點模棱兩可) 似乎是除了拋出錯誤之外最合理的默認值。
uj5u.com熱心網友回復:
為了獲得 OP 中顯示的結果,我們可以將兩個向量放在 a 中list,將它們的lengths調整為maximum lengths(通過添加NA's)并測驗比較是否為%in% TRUE。
list(a, b) |>
(\(.) lapply(., `length<-`, max(lengths(.))))() |>
(\(.) do.call(\(x, y, ...) (x == y) %in% TRUE, .))()
# [1] TRUE TRUE FALSE FALSE
筆記: R version 4.1.2 (2021-11-01)
資料:
a <- c("p", "o")
b <- c("p", "o", "l", "o")
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393429.html
上一篇:由于列名不同,生成輸出表的問題
下一篇:R:記錄函式的索引迭代
