Tit*_*552 1 r function list vector mean
这对学校来说是一个问题,但我一直在努力工作几个小时,只需要一个正确的方向.我不是要求完整的答案.
我获得了一个包含学生成绩的数据框,用于各种评估.我必须编写一个函数,该函数将生成一个向量或列表,该函数或列表将给出一个特定评估的最小值,最大值和平均值.
我得到了以下框架:
checkAssessment <- function(df, assessmentName)
{
}
Run Code Online (Sandbox Code Playgroud)
我需要能够编写代码,以便在执行以下代码行时获得下面的确切结果:
checkAssessment(df,"hw1")
# $min
# [1] 0
#
# $max
# [1] 14
#
# $avg
# [1] 12.58824
Run Code Online (Sandbox Code Playgroud)
所以,我已经尝试了很多方法来解决这个问题,但没有一个方法可行.最接近的两个是
checkAssessment <- function(df, assessmentName)
{
my_min <- df$assessmentName == min(assessmentName)
my_max <- df$assessmentName == max(assessmentName)
my_avg <- df$assessmentName == mean(assessmentName)
return(df[my_min, ])
return(df[my_max, ])
return(df[my_avg, ])
}
Run Code Online (Sandbox Code Playgroud)
和
checkAssessment <- function(df, assessmentName)
{
my_min <- sapply(df$assessmentName, min)
my_max <- sapply(df$assessmentName, max)
my_avg <- sapply(mean.default(df$assessmentName, trim = 0, na.rm = FALSE,
...))
funs = c(min, max, mean)
return(df[my_min, ])
return(df[my_max, ])
return(df[my_avg, ])
}
Run Code Online (Sandbox Code Playgroud)
我甚至不确定我是否接近其中任何一个.我是一个介绍性的R课程所以代码应该相当简单,但我已经开发了一个带有这个问题的心理障碍.
任何帮助将非常感谢.谢谢.
因为你被赋予了功能框架,所以我们必须使用它.
checkAssessment <- function(df, assessmentName)
{
x <- df[[assessmentName]] ## extract column vector
return(list(min = min(x), max = max(x), avg = mean(x))) ## use a list for multiple return
}
Run Code Online (Sandbox Code Playgroud)
注意:
[[]].可以使用$,但它可以进行部分匹配; 也许这个答案可以帮助你理解这个概念;min,max以及mean你不需要挣扎x[x == min(x)]等等.即使你想要这个逻辑,你也可以试试x[which.min(x)].阅读?which.min更多;list(1, 2),但列表可以有名称,所以比较list(a = 1, b = 2).测试
我们使用R的内置数据集trees进行测试.
checkAssessment(trees, "Height")
#$min
#[1] 63
#$max
#[1] 87
#$avg
#[1] 76
Run Code Online (Sandbox Code Playgroud)
您可能还需要指出代码存在问题的地方:
checkAssessment <- function(df, assessmentName)
{
my_min <- df$assessmentName == min(assessmentName)
my_max <- df$assessmentName == max(assessmentName)
my_avg <- df$assessmentName == mean(assessmentName)
return(df[my_min, ])
return(df[my_max, ])
return(df[my_avg, ])
}
Run Code Online (Sandbox Code Playgroud)
首先,min(assessmentName)没有意义.也许你想要
df$assessmentName == min(df$assessmentName)
Run Code Online (Sandbox Code Playgroud)
然后,return(df[my_min, ])返回一个数据帧,一行但多列.也许你想要:
return(df[my_min, assessmentName])
Run Code Online (Sandbox Code Playgroud)
最后,经过上述操作后return,以下内容不会产生任何影响:
return(df[my_max, assessmentName])
return(df[my_avg, assessmentName])
Run Code Online (Sandbox Code Playgroud)
因为该函数在看到第一次返回后终止.这就是为什么你应该使用"列表"来获取多个返回值.