這個問題指的是這個有沒有最好的方法將串列值附加到 R 中串列的子串列?.
解決方案之一是:
a <- list(3,5,7)
l <- list(c(1,2,3), c(2,1,4), c(4,7,6))
mapply(c, l, a, SIMPLIFY=F)
如果我嘗試在我的機器上應用它,我會收到錯誤:
Error in SIMPLIFY == "array" :
comparison (1) is possible only for atomic and list types
如果我使用它-> 沒有錯誤:
mapply(c, l, a, SIMPLIFY = FALSE)
我想了解為什么在使用SIMPLIFY =F and not in SIMPLIFY = FALSE.
我正在使用 rstudio - 云:
> version
_
platform x86_64-pc-linux-gnu
arch x86_64
os linux-gnu
system x86_64, linux-gnu
status
major 4
minor 1.3
year 2022
month 03
day 10
svn rev 81868
language R
version.string R version 4.1.3 (2022-03-10)
nickname One Push-Up
uj5u.com熱心網友回復:
在新的 R 會話中,此錯誤不可重現:
a <- list(3,5,7)
l <- list(c(1,2,3), c(2,1,4), c(4,7,6))
mapply(c, l, a, SIMPLIFY=F)
#> [[1]]
#> [1] 1 2 3 3
#>
#> [[2]]
#> [1] 2 1 4 5
#>
#> [[3]]
#> [1] 4 7 6 7
F但是,我們可以通過使用函式覆寫來復制您的錯誤:
F <- function() {}; mapply(c, l, a, SIMPLIFY=F)
#> Error in SIMPLIFY == "array" :
#> comparison (1) is possible only for atomic and list types
這表明您在搜索路徑的某處有一個名為F.
我們可以猜測它是一個函式而不是資料框或向量的原因是,我們只會在傳遞給它的東西SIMPLIFY沒有為==運算子定義方法時才會出現此錯誤,并且函式是最有可能的候選者(特別是因為它被稱為F)
如果您查看 的源代碼mapply,您將看到該SIMPLIFY引數被傳遞給simplify2array當且僅當它不評估為原子時FALSE:
function (FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE, USE.NAMES = TRUE)
{
FUN <- match.fun(FUN)
dots <- list(...)
answer <- .Internal(mapply(FUN, dots, MoreArgs))
if (USE.NAMES && length(dots)) {
if (is.null(names1 <- names(dots[[1L]])) && is.character(dots[[1L]]))
names(answer) <- dots[[1L]]
else if (!is.null(names1))
names(answer) <- names1
}
if (!isFALSE(SIMPLIFY))
simplify2array(answer, higher = (SIMPLIFY == "array"))
else answer
}
如果它不是 atomic FALSE,則使用運算子SIMPLIFY測驗引數是否與字串相等。如果無法測驗物件與字串的相等性,我們將收到此錯誤。"array"==
我認為這個問題是一個很好的例子,說明為什么永遠不應該F在 R 中用作變數名,以及為什么應該始終使用FALSE而不是F.
uj5u.com熱心網友回復:
正如 OP 提到他們沒有F在控制臺中創建任何功能,它可能來自加載collapse包
library(collapse)
然后我們檢查?F
flag是計算滯后和領先的(序列)的 S3 泛型。L并且F是代表滯后和領先運營商的標志的包裝器......
因此,可以重現錯誤
> mapply(c, l, a, SIMPLIFY=F)
Error in SIMPLIFY == "array" :
comparison (1) is possible only for atomic and list types
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/481193.html
