r警告'长度(x)= 2> 1'在强制质量(逻辑(1)'

发布于 2025-02-10 23:28:43 字数 669 浏览 1 评论 0 原文

使用r 4.1.3我观察到:

var <- 0
> if(is.data.frame(var) || is.vector(var)) var <- as.matrix(var)
> is.null(var) || (!is.matrix(var) && var == 0) || (dim(var)==c(1,1) && var[1,1]==0)
[1] TRUE

但是,在r 4.2.1时,我会在同一代码上观察警告,

> var <- 0
> if(is.data.frame(var) || is.vector(var)) var <- as.matrix(var)
> is.null(var) || (!is.matrix(var) && var == 0) || (dim(var)==c(1,1) && var[1,1]==0)
[1] TRUE
Warning message:
In dim(var) == c(1, 1) && var[1, 1] == 0 :
  'length(x) = 2 > 1' in coercion to 'logical(1)'

很难在此处找到根本原因。现在发生的原因有什么想法,这是一个很好的解决方案吗?

Using R 4.1.3 I observe:

var <- 0
> if(is.data.frame(var) || is.vector(var)) var <- as.matrix(var)
> is.null(var) || (!is.matrix(var) && var == 0) || (dim(var)==c(1,1) && var[1,1]==0)
[1] TRUE

However, with R 4.2.1 I observe the warning on this same code

> var <- 0
> if(is.data.frame(var) || is.vector(var)) var <- as.matrix(var)
> is.null(var) || (!is.matrix(var) && var == 0) || (dim(var)==c(1,1) && var[1,1]==0)
[1] TRUE
Warning message:
In dim(var) == c(1, 1) && var[1, 1] == 0 :
  'length(x) = 2 > 1' in coercion to 'logical(1)'

Having a hard time finding the root cause here. Any thoughts on a reason this occurs now and a good fix?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枕梦 2025-02-17 23:28:43

dim(var)== c(1,1)给出两个 true 。请参阅下面的 r 新闻。 以前可能会替换

identical(dim(var), c(1L, 1L))
all(dim(var) == c(1,1))

,我们被告知&amp;&amp; and || >()中都可以安全地使用是还是错。但是现在它会警告您。这实际上使检测错误变得更容易,因此我对此更改感到满意。

不幸的是,此更改影响了一些 r 软件包(例如,请参见:由于“如果在“错误:条件具有长度&gt; 1 )。结果,过去使用顺利进行的代码突然发出警告甚至错误。

dim(var) == c(1,1) gives two TRUE. See R News below. Possible replacements are

identical(dim(var), c(1L, 1L))
all(dim(var) == c(1,1))

Previously we were told that && and || are safe to use in if () as they silently return a single TRUE or FALSE. But now it will warn you. This actually makes it easier to detect bugs, so I am happy with this change.

Unfortunately, this change has affected a few R packages (see for example: Package ceases to work due to "if" error: condition has length > 1). As a result, the code that used to work smoothly suddenly throws warnings or even errors.

change

温柔少女心 2025-02-17 23:28:43

我只是在同一问题中跑了。我使用简单的&amp;解决了问题。而不是双重。

filter(data, n > 1 && !!sym(group) %in% category_to_merge)

这个

filter(data, n > 1 & !!sym(group) %in% category_to_merge)

I just ran in the same issue. I fixed my problem using a simple & rather than a double.

From this

filter(data, n > 1 && !!sym(group) %in% category_to_merge)

to this

filter(data, n > 1 & !!sym(group) %in% category_to_merge)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文