如何在函数中包含辅助函数以使用前缀从 data.frame 中查找和更改数据?还需要计数和使用循环
How do I include helper functions inside a function to find and alter data, using prefixes, from a data.frame? Also need to count and use loop
这是学校的问题,但我已经研究了一段时间,只需要指出正确的方向。我不是要完整的答案。
我得到了一个数据框,其中包含用于各种评估的学生成绩。我必须编写一个函数,为提供名称的评估计算权重(作为 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()
?或许我完全偏离了轨道?
如有任何帮助,我们将不胜感激。预先感谢您的宝贵时间。
我能看到几件事:
assessmentPrefix
是 return 一个值,但您没有将该值(使用 <-
)分配给任何要再次使用的东西。
您的 assessmentCount
函数需要两个参数,而您只提供一个参数,将 assessmentPrefix
作为 df
参数传递。鉴于您稍后尝试再次使用此结果,您需要为该函数 return()
赋值并将其分配给对象以在 myAssessmentWeight
.
中引用
此外,根据您的描述,assessmentTypeWeights
是一个向量,而不是函数,因此一旦您修复上面的代码,该行代码也会 return 出错。
希望能对您有所帮助,让您朝着正确的方向前进!
仅供参考,如果您可以提供有关输入数据结构的一些详细信息以及您认为输出应该是什么样子,您将获得更多帮助。
我终于明白了。我怀疑它是否是最简洁或格式最好的代码,但它确实有效。
assessmentWeight <- function(df, assessmentName, assessmentTypeWeights)
{
myPrefix <- assessmentPrefix(assessmentName, assessmentTypeWeights)
myWeight <- assessmentTypeWeights[myPrefix]
myCols <- assessmentCount(df, myPrefix)
myAssessmentWeight <- (myWeight / myCols)
return(myAssessmentWeight)
}
这是学校的问题,但我已经研究了一段时间,只需要指出正确的方向。我不是要完整的答案。
我得到了一个数据框,其中包含用于各种评估的学生成绩。我必须编写一个函数,为提供名称的评估计算权重(作为 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()
?或许我完全偏离了轨道?
如有任何帮助,我们将不胜感激。预先感谢您的宝贵时间。
我能看到几件事:
assessmentPrefix
是 return 一个值,但您没有将该值(使用 <-
)分配给任何要再次使用的东西。
您的 assessmentCount
函数需要两个参数,而您只提供一个参数,将 assessmentPrefix
作为 df
参数传递。鉴于您稍后尝试再次使用此结果,您需要为该函数 return()
赋值并将其分配给对象以在 myAssessmentWeight
.
此外,根据您的描述,assessmentTypeWeights
是一个向量,而不是函数,因此一旦您修复上面的代码,该行代码也会 return 出错。
希望能对您有所帮助,让您朝着正确的方向前进!
仅供参考,如果您可以提供有关输入数据结构的一些详细信息以及您认为输出应该是什么样子,您将获得更多帮助。
我终于明白了。我怀疑它是否是最简洁或格式最好的代码,但它确实有效。
assessmentWeight <- function(df, assessmentName, assessmentTypeWeights)
{
myPrefix <- assessmentPrefix(assessmentName, assessmentTypeWeights)
myWeight <- assessmentTypeWeights[myPrefix]
myCols <- assessmentCount(df, myPrefix)
myAssessmentWeight <- (myWeight / myCols)
return(myAssessmentWeight)
}