r - 为什么我在使用替换功能时收到此消息?在 mean.default(x, na.rm = TRUE) 中:参数不是数字或逻辑:返回 NA
问题描述
我正在使用R 中的替换函数,并制作了这个简单的函数来修改向量均值的值。它在单个向量上完美运行:
'value.for.mean<-' <- function(x, value, ...) {
x[value] = mean(x, na.rm=TRUE)
x
}
x <- c(1:3,NA, 2:5,1:10, NA, NA)
value.for.mean(x) <- is.na(x)
x
#Output:
[1] 1.00 2.00 3.00 4.41 2.00 3.00 4.00 5.00 1.00 2.00 3.00 4.00
[13] 5.00 6.00 7.00 8.00 9.00 10.00 4.41 4.41
当我尝试对 data.frame 使用相同的函数时,出现错误:
x <- data.frame(a=c(1,3,NA,4,2), b=c(9,8,5,4,NA))
value.for.mean(x) <- is.na(x)
Warning message: In mean.default(x, na.rm = TRUE) : argument is not numeric or logical: returning NA
我在 SO 中阅读了许多涉及该错误的线程,但没有人指出这种特定情况,因为我的变量是数字的,正如您在调用时看到的那样str(x)
'data.frame': 5 obs. of 2 variables:
$ a: num 1 3 NA 4 2
$ b: num 9 8 5 4 NA
提前感谢您的评论。
解决方案
上的mean
作品vector
。根据?mean
,用法是
mean(x, ...)
在哪里
x - 一个 R 对象。目前有数字/逻辑向量和日期、日期时间和时间间隔对象的方法。
因此,当我们mean
在整体上应用时data.frame
,它会给出与 OP 帖子中相同的警告信息,因为 OP 的函数是一个包装器mean
mean(x)
#[1] NA
警告消息:在 mean.default(x) 中:参数不是数字或逻辑:返回 NA
我们需要遍历列并应用函数,返回列并将 s 更新list
回vector
原始数据集
x[] <- lapply(x, function(y) {
value.for.mean(y) <- is.na(y)
y})
或应用它tidyverse
library(tidyverse)
x %>%
mutate_all(funs({value.for.mean(.) <- is.na(.); .}))
这里
推荐阅读
- android - 设置 On Click Listener 功能,出现错误
- python - TypeError:只能在数字循环中将 str(不是“int”)连接到 str
- javascript - 使用javascript动态添加组时如何更新SVG
- r - R 无法尝试捕获多个错误
- tensorflow - 将训练循环转换为可编译的 TF 模型
- c - 学习如何使用 C 中的管道同步父进程和子进程的执行
- c# - 如何在 Polly ExecuteAsync 的 lambda 表达式中包含多行代码块?
- python-3.x - 如何限制用户在 Python 3 中只输入字母和数字?
- python - 我想使用 sum 函数来计算特定字符的多次出现,但我的脚本只适用于一个字符
- python - 使用 np.apply_along_axis 移动值会返回不一致的结果