使用 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
Run Code Online (Sandbox Code Playgroud)
但是,在 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)'
Run Code Online (Sandbox Code Playgroud)
很难在这里找到根本原因。对于现在发生这种情况的原因以及好的解决方案有什么想法吗?
李哲源*_*李哲源 28
dim(var) == c(1,1)
给出两个TRUE
. 请参阅下面的R新闻。可能的替代品是
identical(dim(var), c(1L, 1L))
all(dim(var) == c(1,1))
Run Code Online (Sandbox Code Playgroud)
之前我们被告知,&&
并且||
可以安全使用,if ()
因为它们会默默地返回一个 TRUE 或 FALSE。但现在它会警告你。这实际上使检测错误变得更容易,所以我对这一更改感到满意。
不幸的是,此更改影响了一些R包(例如,请参阅:由于“if”错误,包停止工作:条件长度 > 1)。结果,以前运行顺利的代码突然抛出警告甚至错误。
归档时间: |
|
查看次数: |
31894 次 |
最近记录: |