R适用,返回输入和输出

时间:2018-12-03 22:49:41

标签: 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

2 个答案:

答案 0 :(得分:2)

您甚至不需要在这里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)

enter image description here

#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

答案 1 :(得分:0)

我们可以使用基数R的transform

df <- data.frame(input1, input2)
transform(df, output = apply(df, 1, function(x) x['input1'] + x['input2']))
#  input1 input2 output
#1      1    101    102
#2      2    102    104
#3      3    103    106
相关问题