r - R 中 apply 中的 equal() 行为

标签 r compare apply

这很奇怪。

apply( matrix(c(1,NA,2,3,NA,NA,2,4),ncol = 2), 1, function(x) identical(x[1], x[2]) )
#[1] FALSE  TRUE  TRUE FALSE
apply( data.frame(a = c(1,NA,2,3),b = c(NA,NA,2,4)), 1, function(x) identical(x[1], x[2]) )
#[1] FALSE FALSE FALSE FALSE
apply( as.matrix(data.frame(a = c(1,NA,2,3),b = c(NA,NA,2,4))), 1, function(x) identical(x[1], x[2]) )
#[1] FALSE FALSE FALSE FALSE

这是由于 joran 如下所示的名称属性造成的。我可以通过以下方式获得我期望的结果:

apply( data.frame(a = c(1,NA,2,3),b = c(NA,NA,2,4)), 1, function(x) identical(unname(x[1]), unname(x[2])) ) 

或者:

apply( data.frame(a = c(1,NA,2,3),b = c(NA,NA,2,4)), 1, function(x) identical(x[[1]], x[[2]]) ) 

有没有更自然的方法来解决这个问题?似乎应该有一个选项来忽略属性,就像在 all.equal() 中一样。

最佳答案

可能

mapply(identical, x$a, x$b)
#[1] FALSE  TRUE  TRUE FALSE 

其中x是数据框。

顺便说一句,将 apply 与数据框一起使用几乎总是一个错误。它将把数据框强制转换为矩阵,这通常会导致意外的结果。

关于r - R 中 apply 中的 equal() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47213268/

相关文章:

Java:输入比较

r - R中数字数据帧的有序列名数据帧的更快方法

Javascript比较不起作用

r - 在 R 中对数据框进行排序(基于列值)

r - 清理多个 DataFrame 的列名称

r - ggplot2中带有facet_wrap的 map

C++比较结构数组中的字符串

python - 基于与 DataFrame 列数匹配的 Series 对 pandas DataFrame 行应用操作

r - apply() 函数分别按顺序应用于矩阵的列和数值向量的元素

r - 在knitr或pander输出中保留表的名字吗?