我的情况是我想要"坚持"现有data.frame的一堆列,其中每列是一个在其他列上进行数学运算的函数。我的目标是:
理想情况下,我想要类似的东西:
df <- data.frame(a = rnorm(10), b = rnorm(10))
y <- function (x) a + b
z <- function (x) b * y
df2 <- lapply (list (y, z), df)
其中df2是一个包含4列的data.frame:a,b,y和z。我认为这实现了目标。
我最接近的是:
df <- data.frame(a = rnorm(10), b = rnorm(10))
y <- function (x) x$a + x$b
z <- function (x) x$b * x$y
funs <- list (
y = y,
z = z
)
df2 <- df
df2$y <- funs$y(df2)
df2$z <- funs$z(df2)
这实现了目标1和2,但不是3和4。
提前感谢您的帮助。
答案 0 :(得分:0)
这可能是你想要的东西。在定义dfapply函数之后,除了使用表达式而不是函数之外,它可以非常类似于你的初衷而没有太多像x $ a等的东西。
dfapply <- function(exprs, df){
for (expr in exprs) {
df <- within(df, eval(expr))
}
df
}
df <- data.frame(a = rnorm(10), b = rnorm(10))
expr1 <- expression(y <- a + b)
expr2 <- expression(z <- b * y)
df2 <- dfapply(c(expr1, expr2), df)