【发布时间】:2015-07-22 13:12:50
【问题描述】:
这样做的正确方法是什么?
在给定一系列输入的情况下,我有一个单独工作的函数,我想通过逐行循环数据来在大型数据集而不是奇异值上使用此函数。我试图更新函数以调用 data.frame 列而不是向量值,但没有成功。
一个简单的例子是:
假设我有一个包含 4 列的 date.frame,data$id、data$height、data$weight、data$gender。我想编写一个循环遍历每一行的函数(使用apply)并计算BMI(kg/m^2)。我知道使用 dplyr 很容易做到,但我想学习如何在不求助于外部包的情况下做到这一点,但找不到明确的答案如何正确引用函数中的列。
如果这是重复的,请提前道歉。我一直在非常彻底地搜索 *,希望能找到一个现有的例子。
【问题讨论】:
-
基本算术函数是矢量化的。您不需要
dplyr或lapply来添加BMI 列,只需data$BMI = data$weight / data$height^2。 -
如果你想对一个函数取一个数据框并添加一个BMI列然后返回修改后的数据框,你可以按列号
data[, 2] / data[, 3]^2引用列,引用名称@ 987654325@。对于这两种方法,您可以让用户为函数输入可选参数,以指定要使用的列索引或引用的列名称。 -
@Gregor 但是不要那样做,对吧?传递data.frame似乎有点浪费。只需编写一个函数
myfun用于构造列并将其与data$mynewcol <- with(data,myfun(weight,height,other_col))一起使用 -
@Frank 是的,但是我试图回答一般问题而不是具体情况。 OP 似乎想知道如何处理函数内的数据和列,但选择了一个示例,其中这不是一个 应该 做的。回顾示例,答案是字符串列名、索引或 NSE。