首页 > 解决方案 > Hackerrank 测试题:从 IRIS 数据集中找到最大列值的总和

问题描述

黑客等级截图

你好,所以我在尝试对hackerrank进行招聘测试时遇到了这个问题。

从他们的问题可以清楚地看出,他们想要 iris 数据集前四列的最大值之和。但是,我的回答被标记为错误。

这是代码:

options(warn = -1)
df <- iris
maxFun <- function(df){
for(i in 1:nrow(df))
{
    for(j in 1:(ncol(df)-1))
    {
          df[i,j]<-as.integer(df[i,j])
    }
}
s<-0
s<-sum(max(df$Sepal.Length),max(df$Sepal.Width),max(df$Petal.Length),max(df$Petal.Width))
return(s)
}
cat(maxFun(df))

这里有什么问题?如果hackerrank期待其他类型的输出,为什么问题还不够清楚?

标签: rtesting

解决方案


您正在尝试将数据框中的单个单元格转换为数值,然后将它们保存在同一位置,而不是新的数据框。这不会转换该列的类。您可以print(df在循环后使用我们 ) 并检查这一点。所以当你试图找到最大值时,值仍然是 character ,并且会出现错误。

现在,如果您在系统上尝试它可能不会遇到错误,因为 Iris 数据框实际上具有数字列。要模拟上述结构,您首先必须将列转换为字符。您可以使用以下命令更改所有列的类:

df<- apply(X=iris, MARGIN = 2, FUN = as.character)

第二件事是在 R 中你会避免使用循环。您可以使用相同的apply方法来查找按列或按行的总和


推荐阅读