首页 > 解决方案 > R应用,返回输入和输出

问题描述

在 R 中,有没有办法使用 apply 或 lapply 调用返回一个包含输入和输出的类似数据帧的结构?

例子:

input1 <- c(1:3)
input2 <- c(101:103)
apply(data.frame(input1, input2), 1, function(x) {return (x['input1'] + x['input2'])})

产生:

[1] 102 104 106

有没有办法使用 apply 语句来创建以下等效项:

  input1 input2 output
1      1    101    102
2      2    102    104
3      3    103    106

标签: r

解决方案


你甚至不需要apply在这里,只要做

dat <- data.frame(input1, input2)
dat[, "output"] <- dat[, "input1"] + dat[, "input2"]
dat
#  input1 input2 output
#1      1    101    102
#2      2    102    104
#3      3    103    106

这是两种方法的快速基准测试

# dummy data
dat2 <- do.call(rbind, replicate(1e5, dat, simplify = FALSE))

library(microbenchmark)
benchmark <- microbenchmark(
  "apply" = transform(dat2, output = apply(dat2, 1, function(x) x['input1'] + x['input2'])),
  "not-apply" = `[<-`(dat2, "output", value = dat2[, "input1"] + dat2[, "input2"]), 
  times = 50
)

autoplot(benchmark)

在此处输入图像描述

#Unit: milliseconds
#      expr         min          lq        mean      median          #uq         max neval
#     apply 1422.320194 1652.910918 2208.146278 2170.704283 2659.947690 3665.780187    50
# not-apply    1.778778    1.823522    1.976408    1.900479    2.123708    2.746042    50

推荐阅读