编写函数以从数据帧中提取值

时间:2014-05-09 15:11:32

标签: r

我正在尝试编写我的第一个函数。该函数的目的是提取与特定字符串关联的值。这是我的数据:

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)
  1. 该功能不起作用(“数学函数的非数字参数”)。
  2. 我认为我没有使用正确的分配方法来使内部函数对象x变为test.fun
  3. 使用案例:撰写一篇论文,引用摘要数据框中的值。类似于“第一项的价值,一个非常重要的结构,是\Sexpr{test.fun}。”我知道我可以内联计算摘要统计信息,但在这个特定的用例中,我需要能够从现有的数据帧中引用一个单元格值。此外,我不想指定行索引值,因为“第1项”可能不在第一行。恰好是在这个简单的例子中。

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