gpt4 book ai didi

R max 函数忽略不适用

转载 作者:行者123 更新时间:2023-12-04 10:50:57 28 4
gpt4 key购买 nike

我有以下工作代码。当我在不同的数据集上复制相同的东西时,我得到了错误:(

#max by values
df <- data.frame(age=c(5,NA,9), marks=c(1,2,7), story=c(2,9,NA))
df

df$colMax <- apply(df[,1:3], 1, function(x) max(x[x != 9],na.rm=TRUE))
df

我试图对更大的数据做同样的事情,但收到警告,为什么?
maindata$max_pc_age <- apply(maindata[,c(paste("Q2",1:18,sep="_"))], 1, function(x) max(x[x != 9],na.rm=TRUE))


50: In max(x[x != 9], na.rm = TRUE) :
no non-missing arguments to max; returning -Inf

为了更好地理解问题,我进行了如下更改,但仍然收到警告
maindata$max_pc_age <- apply(maindata[,c(paste("Q2",1:18,sep="_"))], 1, function(x) max(x,na.rm=TRUE))
1: In max(x, na.rm = TRUE) : no non-missing arguments to max; returning -Inf

最佳答案

看来问题已经在评论中指出了。由于某些向量仅包含 NA s, -Inf报告,我从你不喜欢的评论中提取。在这个答案中,我想指出一种可能的方法来解决这个问题,即内置控制语句(而不是在事实之后覆盖 -Inf,这同样有效)。例如,

 my.max <- function(x) ifelse( !all(is.na(x)), max(x, na.rm=T), NA)

做这个把戏。如果 all 中的每个 ( x ) 元素是 NA ,然后 NA返回,并且 max否则。如果您想要返回任何其他值,只需交换 NA为了那个值(value)。您也可以轻松地将它构建到您的 apply 中。 - 功能。例如
 maindata$max_pc_age <- apply(maindata[,c(paste("Q2",1:18,sep="_"))], 1, my.max)

我有时仍然对 R 的 NA 感到困惑和空集处理。类似 test <- NA; test==NA 的声明会给 NA结果(而不是 TRUE ,由 is.na(test) 返回),有时可以说由于缺少值,您怎么知道这两个缺失值是相同的?然而,在这种情况下, max返回 -Inf因为它被赋予了一个空集,我认为这并不明显。我的经验是,如果出现奇怪和意外的结果, NA s 或空集经常被涉及。

关于R max 函数忽略不适用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24519794/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com