当乐趣产生一个以上的价值时,有没有一种方法可以将'outer'用于两个向量
我有一个这样的函数当乐趣产生一个以上的价值时,有没有一种方法可以将'outer'用于两个向量,r,list,matrix,R,List,Matrix,我有一个这样的函数 myfun <- function(x, y){ c(x, y, x+y, x*y) } vmyfun <- Vectorize(myfun) outer(1:10, 2:5,vmyfun) 我希望结果是一个有4个矩阵的列表 [[1]] [,1] [,2] [,3] [,4] [1,] 1 1 1 1 [2,] 2 2 2 2 [3,] 3 3 3 3 [4,
myfun <- function(x, y){
c(x, y, x+y, x*y)
}
vmyfun <- Vectorize(myfun)
outer(1:10, 2:5,vmyfun)
我希望结果是一个有4个矩阵的列表
[[1]]
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
[5,] 5 5 5 5
[6,] 6 6 6 6
[7,] 7 7 7 7
[8,] 8 8 8 8
[9,] 9 9 9 9
[10,] 10 10 10 10
[[2]]
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 2 3 4 5
[3,] 2 3 4 5
[4,] 2 3 4 5
[5,] 2 3 4 5
[6,] 2 3 4 5
[7,] 2 3 4 5
[8,] 2 3 4 5
[9,] 2 3 4 5
[10,] 2 3 4 5
[[3]]
[,1] [,2] [,3] [,4]
[1,] 3 4 5 6
[2,] 4 5 6 7
[3,] 5 6 7 8
[4,] 6 7 8 9
[5,] 7 8 9 10
[6,] 8 9 10 11
[7,] 9 10 11 12
[8,] 10 11 12 13
[9,] 11 12 13 14
[10,] 12 13 14 15
[[4]]
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 4 6 8 10
[3,] 6 9 12 15
[4,] 8 12 16 20
[5,] 10 15 20 25
[6,] 12 18 24 30
[7,] 14 21 28 35
[8,] 16 24 32 40
[9,] 18 27 36 45
[10,] 20 30 40 50
有没有办法实现这一点?谢谢你们
更新:
我在这个问题上树立了一个坏榜样。我真正想要的比我提供的示例结果要复杂得多。
我不想更改函数myfun
。这是一个新的例子。它是一个函数,用于获得不同阈值的mat之和
myfun2 <- function(x, y){
mat <- matrix(data = rexp(x, rate = y), nrow = 10, ncol = 20)
sapply(seq(from = 0, to = max(mat), length.out = 100), function(x){
mat[mat < x] <- 0
sum(mat)})
}
> myfun2(10,15)
[1] 10.023527 10.023527 10.023527 10.023527 10.023527 10.023527 10.023527 10.023527 9.893362
[10] 9.893362 9.893362 9.893362 9.893362 9.893362 9.893362 9.893362 9.893362 9.893362
[19] 9.893362 9.893362 9.893362 9.893362 9.893362 9.893362 9.893362 9.893362 9.893362
[28] 9.893362 9.893362 9.893362 9.353354 9.353354 9.353354 9.353354 9.353354 9.353354
[37] 9.353354 9.353354 9.353354 9.353354 9.353354 9.353354 9.353354 8.563003 8.563003
[46] 8.563003 8.563003 8.563003 8.563003 7.673577 7.673577 7.673577 6.729326 6.729326
[55] 6.729326 6.729326 6.729326 6.729326 6.729326 6.729326 6.729326 6.729326 5.590193
[64] 5.590193 5.590193 5.590193 4.385858 4.385858 4.385858 3.113081 1.828594 1.828594
[73] 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594
[82] 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594
[91] 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594 1.828594
[100] 1.828594
结果应该是100个矩阵的列表
外部
不支持这一点,但我们可以通过lappy
实现这一点:
## function list `funlist`
funlist <- list(function(x, y) x, function(x, y) y, "+", "*")
## use `lapply`
lapply(funlist, FUN = function (fun) outer(1:10,2:5,fun))
跟进 我对R的知识相当有限。感谢@thelatemail的评论,我想我从今天开始学习使用
Map
:
Map(outer, list(1:10), list(2:5), funlist)
请告诉我-您也可以通过
Map(外部、列表(1:10)、列表(2:5)、funlist)指定它。
谢谢您的回答。但我不会将我的函数更改为函数列表。我已经更新了。
[[1]]
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
[5,] 5 5 5 5
[6,] 6 6 6 6
[7,] 7 7 7 7
[8,] 8 8 8 8
[9,] 9 9 9 9
[10,] 10 10 10 10
[[2]]
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 2 3 4 5
[3,] 2 3 4 5
[4,] 2 3 4 5
[5,] 2 3 4 5
[6,] 2 3 4 5
[7,] 2 3 4 5
[8,] 2 3 4 5
[9,] 2 3 4 5
[10,] 2 3 4 5
[[3]]
[,1] [,2] [,3] [,4]
[1,] 3 4 5 6
[2,] 4 5 6 7
[3,] 5 6 7 8
[4,] 6 7 8 9
[5,] 7 8 9 10
[6,] 8 9 10 11
[7,] 9 10 11 12
[8,] 10 11 12 13
[9,] 11 12 13 14
[10,] 12 13 14 15
[[4]]
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 4 6 8 10
[3,] 6 9 12 15
[4,] 8 12 16 20
[5,] 10 15 20 25
[6,] 12 18 24 30
[7,] 14 21 28 35
[8,] 16 24 32 40
[9,] 18 27 36 45
[10,] 20 30 40 50
Map(outer, list(1:10), list(2:5), funlist)