我正在尝试编写我的第一个函数。该函数的目的是提取与特定字符串关联的值。这是我的数据:
mydata <- data.frame(varname=c("Item 1", "Item 2"),
value=c(4.452, 5.546))
我的非用户定义函数方法是:
test.nofun <- round(mydata$value[mydata$varname=="Item 1"], 2)
test.nofun
# [1] 4.45
这是我尝试过的功能:
myfun <- function(dat, itemcol, valcol, item, rd) {
x <- round(dat$valcol[dat$itemcol==item], rd)
}
test.fun <- myfun(mydata, varname, value, "Item 1", 2)
x
变为test.fun
。 使用案例:撰写一篇论文,引用摘要数据框中的值。类似于“第一项的价值,一个非常重要的结构,是\Sexpr{test.fun}
。”我知道我可以内联计算摘要统计信息,但在这个特定的用例中,我需要能够从现有的数据帧中引用一个单元格值。此外,我不想指定行索引值,因为“第1项”可能不在第一行。恰好是在这个简单的例子中。
答案 0 :(得分:2)
通常,在尝试编写函数时使用[
而不是$
。
我们想重新创建(没有round
):
mydata[, "value"][mydata[, "varname"] == "Item 1"]
# [1] 4.452
这就是我们如何做到的:
myfun <- function(dat, itemcol, valcol, item, rd) {
round(dat[, valcol][dat[, itemcol] == item], rd)
}
您还需要引用大多数参数(除非您在函数中添加几行)。
myfun(mydata, "varname", "value", "Item 1", 2)
# [1] 4.45