【发布时间】:2021-04-06 08:46:27
【问题描述】:
我有一个函数f1,它接受一个数字k 作为输入并返回3 个数字k, k+1, k+2。我想问一下如何将这些结果连接到从1到10的k的数据帧中。这样k这一行就对应了输出f1(k)。
f1 <- function(k){
return (c(k, k+1, k+2))
}
f1(1)
f1(2)
【问题讨论】:
我有一个函数f1,它接受一个数字k 作为输入并返回3 个数字k, k+1, k+2。我想问一下如何将这些结果连接到从1到10的k的数据帧中。这样k这一行就对应了输出f1(k)。
f1 <- function(k){
return (c(k, k+1, k+2))
}
f1(1)
f1(2)
【问题讨论】:
一个选项是Vectorize函数'f1',将值1传递到10,返回一个matrix,然后用as.data.frame将其转换为data.frame
as.data.frame(Vectorize(f1)(1:10))
如果需要垂直,则transpose输出并应用as.data.frame
as.data.frame(t(Vectorize(f1)(1:10)))
-输出
# V1 V2 V3
#1 1 2 3
#2 2 3 4
#3 3 4 5
#4 4 5 6
#5 5 6 7
#6 6 7 8
#7 7 8 9
#8 8 9 10
#9 9 10 11
#10 10 11 12
或者我们可以使用outer
as.data.frame(outer(1:10, 0:2, `+`))
【讨论】:
你也可以使用:
as.data.frame(do.call(rbind,lapply(1:10,f1)))
输出:
as.data.frame(do.call(rbind,lapply(1:10,f1)))
V1 V2 V3
1 1 2 3
2 2 3 4
3 3 4 5
4 4 5 6
5 5 6 7
6 6 7 8
7 7 8 9
8 8 9 10
9 9 10 11
10 10 11 12
【讨论】: