这是一个关于学校的问题,但我已经研究了一段时间,只需要一个正确的方向。我不是要求完整的答案。
我获得了一个包含学生成绩的数据框,用于各种评估。我必须编写一个函数,该函数将为提供名称的评估产生权重(作为总成绩100%的一部分)。该函数需要包含至少一个辅助函数。
我首先提供了以下运行代码行,class()定义为函数:
assessmentTypeWeights <- c(5,15,5,3,2,10,10,10,40)
names(assessmentTypeWeights) <- c("quiz","hw","term1","term2","term3",
"exam1","exam2","exam3","final")
然后我还获得了以下帮助函数:
assessmentPrefix <- function(assessmentName,assessmentTypeWeights)
{
if(assessmentName %in% names(assessmentTypeWeights))
{
return(assessmentName)
}else
{
# find the prefix of the assessment name
# by removing the last digit
prefix <- substring(assessmentName,1,nchar(assessmentName)-1)
return(prefix)
}
}
最后,我的答案提供了以下框架:
assessmentWeight <- function(df, assessmentName, assessmentTypeWeights)
{
#includes helper function "assessmentPrefix"
}
此外,我已经为上一个问题编写了以下函数:
library(stringr)
assessmentCount <- function(df, assessmentNamePrefix)
{
sum(str_detect(names(df), assessmentNamePrefix))
}
我需要能够在上面给出的框架中编写assessmentWeight
函数的代码,以便在执行以下代码行时获得下面的确切结果:
assessmentWeight(df,"quiz1",assessmentTypeWeights)
# quiz
# 0.8333333
和
assessmentWeight(df,"term1",assessmentTypeWeights)
# term1
# 5
这就是我写的:
assessmentWeight <- function(df, assessmentName, assessmentTypeWeights)
{
assessmentPrefix(assessmentName, assessmentTypeWeights)
#determines prefix from name of assessment
assessmentCount(assessmentPrefix)
#determines number of columns in data.frame starting with that prefix
assessmentTypeWeights(assessmentPrefix)
#determines the assessment type weight based on the prexix
myAssessmentWeight <- (assessmentTypeWeights / assessmentCount) * 100
#adjusts the assessment type weight to be percentage of 100%
return(assessmentPrefix, myAssessmentWeight)
#returns the assessment prefix and its weight as part of 100%
}
但是,当我运行此代码时,收到以下错误消息:
Error in type(pattern) :
argument "assessmentNamePrefix" is missing, with no default
当然,我不知道这是否是代码的唯一问题,我不知道如何修复它。我已经浏览了互联网和三本不同的书,但却无法弄清楚我需要改变什么。
我想我可能需要在某处包含函数(?)names()
?或许我完全偏离轨道?
非常感谢任何帮助。提前感谢您的时间。
答案 0 :(得分:1)
我能看到的一些事情:
assessmentPrefix
正在返回一个值,但您并未将该值(使用<-
)分配给要再次使用的任何内容。
您的assessmentCount
函数需要两个参数,并且您只提供一个参数,将assessmentPrefix
作为df
参数传递。鉴于您稍后再次尝试使用此结果,您需要使用该函数return()
一个值并将其分配给要在myAssessmentWeight
中引用的对象。
此外,根据您所描述的内容,assessmentTypeWeights
是一个向量,而不是一个函数,因此一旦修复上面的代码,代码行也会返回错误。
希望有所帮助,可以让你朝着正确的方向前进!
仅供参考,如果您可以在输入数据结构中包含一些细节以及您认为输出应该是什么样的,那么您将获得更多帮助。
答案 1 :(得分:0)
我终于明白了。我怀疑它是最简洁或最好的fomatted代码,但它确实有用。
assessmentWeight <- function(df, assessmentName, assessmentTypeWeights)
{
myPrefix <- assessmentPrefix(assessmentName, assessmentTypeWeights)
myWeight <- assessmentTypeWeights[myPrefix]
myCols <- assessmentCount(df, myPrefix)
myAssessmentWeight <- (myWeight / myCols)
return(myAssessmentWeight)
}