r - 为什么 is.na() 改变它的参数?

标签 r

我刚刚发现 is.na() 的以下行为我不明白的功能:

df <- data.frame(a = 5:1, b = "text")
df
##   a    b
## 1 5 text
## 2 4 text
## 3 3 text
## 4 2 text
## 5 1 text
is.na(df)
##          a     b
## [1,] FALSE FALSE
## [2,] FALSE FALSE
## [3,] FALSE FALSE
## [4,] FALSE FALSE
## [5,] FALSE FALSE
is.na(df) <- "0"
df
##   a    b  0
## 1 5 text NA
## 2 4 text NA
## 3 3 text NA
## 4 2 text NA
## 5 1 text NA

我的问题
为什么 is.na()更改其参数(在本例中向数据框添加额外的列)?在这种情况下,它的行为看起来特别令人费解(或者至少是意外的),因为查询的结果是 FALSE对于所有实例。

注意
这个问题不是关于子集化和更改 NA数据框中的值 - 我知道如何做到这一点( df[is.na(df)] <- "0" )。这个问题是关于 is.na 的行为功能!为什么分配给 is.something函数改变参数本身 - 这是意想不到的。

最佳答案

这里实际使用的函数不是 is.na()但是赋值函数`is.na<-` ,默认方法是 `is.na<-.default` 。将该函数打印到控制台我们看到:

function (x, value) 
{
    x[value] <- NA
    x
}

很明显,value这里应该是一个索引。如果您索引 data.frame喜欢 df["0"] ,它将尝试选择名为 "0" 的列。如果您分配一些东西给 df["0"] ,该列将被创建并填充(在本例中) NA .

澄清一下,`is.na<-`将值设置为 NA ,它不会取代 NA值与其他东西。

关于r - 为什么 is.na() 改变它的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42107628/

相关文章:

R编程数据框——根据位置返回值

来自给定二元离散分布的随机样本

r - caret::train: 指定模型生成参数

r - 设置行名或行名的最佳方法?

r - 如何增加光栅图例标签的大小并使它们变粗?

r - 如何使用 dplyr `across()` 语法过滤全部为 NA 的行?

r - 如何使用R计算高阶统计量中的四阶累积量?

python - 仅保留后续行满足条件后的行

r - 使用 Shinytest 测试可编辑的 DT

r - ggplot : manual color assignment for single variable only