r - 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
解决方案
你甚至不需要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
推荐阅读
- cypress - 步骤失败时将屏幕截图附加到cypress中的cucumber-html-report?
- javascript - Javascript从数组中获取所有数字
- lisp - Clozure Common Lisp 中的 Sharpsign dot 宏
- python - 覆盖引导颜色变量的最佳方法
- angular - 如何将 transfromControl 与组一起使用?
- css - 将 CSS 模块用于组件库而不修改使用它的应用程序中的 Webpack 配置?
- python - 外键下拉菜单中每个登录用户的自定义结果 django admin
- excel - 按列值分组的日期差异
- c++ - 将 Adafruit 库从 C++ 移植到 C
- c - 搜索错误时收到搜索二叉树