r - 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期待其他类型的输出,为什么问题还不够清楚?
解决方案
您正在尝试将数据框中的单个单元格转换为数值,然后将它们保存在同一位置,而不是新的数据框。这不会转换该列的类。您可以print(df
在循环后使用我们 ) 并检查这一点。所以当你试图找到最大值时,值仍然是 character ,并且会出现错误。
现在,如果您在系统上尝试它可能不会遇到错误,因为 Iris 数据框实际上具有数字列。要模拟上述结构,您首先必须将列转换为字符。您可以使用以下命令更改所有列的类:
df<- apply(X=iris, MARGIN = 2, FUN = as.character)
第二件事是在 R 中你会避免使用循环。您可以使用相同的apply
方法来查找按列或按行的总和
推荐阅读
- blazor - Blazor Server:重定向到登录并方便注册页面
- python - 将 typedef 结构从 C++ 转换为 Python
- c - 我找不到分段错误:11 错误
- grpc-node - Node.js node_modules\grpc\src\node\extension_binary\node-v83-win32-x64-unknown\grpc_node.node
- c# - Linux Headless Server (.NET) 上的 Google OAuth2 授权
- c# - C# Entity Framework 连接表
- flutter - 在颤动中更改上标签栏时如何有条件地显示底部导航栏
- jax-rs - 如何从 MultipartFormDataInput 获取 InputStream?
- ios - 应用程序运行时更新领域 IgnoredProperties
- java - 如何改进与多个客户的 Java 聊天?