gpt4 book ai didi

r - FALSE 与 F : Error mapply's SIMPLIFY argument: in SIMPLIFY=F

转载 作者:行者123 更新时间:2023-12-05 01:51:17 25 4
gpt4 key购买 nike

这个问题是指这个Is there a best way to append a list values to a sublist of a list in 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 而不是 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

最佳答案

在新的 R session 中,此错误不可重现:

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
}

如果它不是原子FALSE,则使用测试SIMPLIFY参数是否与字符串"array"相等>== 运算符。如果无法测试对象是否与字符串相等,我们将得到此错误。

我认为这个问题是一个很好的例子,说明了为什么不应该使用 F 作为 R 中的变量名,以及为什么应该始终使用 FALSE 而不是 F.

关于r - FALSE 与 F : Error mapply's SIMPLIFY argument: in SIMPLIFY=F,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72388838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com