R 循环/应用函数以逐个运行两个或多个列表
假设我有一个用户定义的乐趣R 循环/应用函数以逐个运行两个或多个列表,r,loops,ggplot2,R,Loops,Ggplot2,假设我有一个用户定义的乐趣 fun <- function(i,j,k){} 扮演 fun(x1,y1,z1) fun(x1,y2,z1) fun(x2,y1,z1) fun(x2,y2,z1) fun(x1,y1,z2) fun(x1,y2,z2) fun(x2,y1,z2) fun(x2,y2,z2) 我认为家庭可以做这项工作。但是我没有找到合适的 ===============================================================
fun <- function(i,j,k){}
扮演
fun(x1,y1,z1)
fun(x1,y2,z1)
fun(x2,y1,z1)
fun(x2,y2,z1)
fun(x1,y1,z2)
fun(x1,y2,z2)
fun(x2,y1,z2)
fun(x2,y2,z2)
我认为家庭可以做这项工作。但是我没有找到合适的
=====================================================================
这是一个我正在研究的真实例子,但是仍然无法解决
data <- read.table(header = TRUE, stringsAsFactors = FALSE,
text = "ID x1 x2 y1 y2
1 a T 100 2
2 b T 210 4
3 b F 112 5
4 a F 121 1
5 b F 412 1")
boxplot <- function(i,j){
print(ggplot(data,
aes_string(x=colnames(data)[i],
y=colnames(data)[j],
col=colnames(data)[i]))+
geom_boxplot())
}
或
然而,它们并没有像预期的那样发挥作用。
do.call方法仅返回一个绘图,apply one返回8个绘图,但所有绘图都以y轴作为ID
======================================================
for循环使它工作。有什么评论吗
for (i in 2:3) {
for (j in 4:5) {
boxplot(i,j)
}
}
试试这个:
sum3 <- function(x, y, z) x+y+z # test function
mapply(sum3, 1:3, 11:13, 21:23)
## [1] 33 36 39
试试这个:
sum3 <- function(x, y, z) x+y+z # test function
mapply(sum3, 1:3, 11:13, 21:23)
## [1] 33 36 39
试试这个:
sum3 <- function(x, y, z) x+y+z # test function
mapply(sum3, 1:3, 11:13, 21:23)
## [1] 33 36 39
试试这个:
sum3 <- function(x, y, z) x+y+z # test function
mapply(sum3, 1:3, 11:13, 21:23)
## [1] 33 36 39
如果您提供了一个示例,以便我们可以验证可能的解决方案,那么xIt将非常好,但我认为您可以通过
exapand.grid
和do.call
获得您想要的。怎么样
do.call(fun, as.list(unname(expand.grid(c(x1, x2), c(y1,y2), c(z1,z2)))))
如果你有
fun <- function(i,j,k){i+j+k}
x1<-1; x2<-2;
y1<-10; y2<-20;
z1<-100; z2<-200;
如果您提供了一个示例,以便我们可以验证可能的解决方案,那么xIt将非常好,但我认为您可以通过
exapand.grid
和do.call
获得您想要的。怎么样
do.call(fun, as.list(unname(expand.grid(c(x1, x2), c(y1,y2), c(z1,z2)))))
如果你有
fun <- function(i,j,k){i+j+k}
x1<-1; x2<-2;
y1<-10; y2<-20;
z1<-100; z2<-200;
如果您提供了一个示例,以便我们可以验证可能的解决方案,那么xIt将非常好,但我认为您可以通过
exapand.grid
和do.call
获得您想要的。怎么样
do.call(fun, as.list(unname(expand.grid(c(x1, x2), c(y1,y2), c(z1,z2)))))
如果你有
fun <- function(i,j,k){i+j+k}
x1<-1; x2<-2;
y1<-10; y2<-20;
z1<-100; z2<-200;
如果您提供了一个示例,以便我们可以验证可能的解决方案,那么xIt将非常好,但我认为您可以通过
exapand.grid
和do.call
获得您想要的。怎么样
do.call(fun, as.list(unname(expand.grid(c(x1, x2), c(y1,y2), c(z1,z2)))))
如果你有
fun <- function(i,j,k){i+j+k}
x1<-1; x2<-2;
y1<-10; y2<-20;
z1<-100; z2<-200;
如果我理解正确,这应该很简单
apply(expand.grid(c(x1, x2), c(y1,y2), c(z1,z2)),1,fun)
编辑:添加示例
x <-c(13,14)
y <- c(21,22)
z<- c(35,36)
apply(expand.grid(x,y,z),1,mean)
[1] 23.00000 23.33333 23.33333 23.66667 23.33333 23.66667 23.66667 24.00000
x如果我理解正确,这应该很简单
apply(expand.grid(c(x1, x2), c(y1,y2), c(z1,z2)),1,fun)
编辑:添加示例
x <-c(13,14)
y <- c(21,22)
z<- c(35,36)
apply(expand.grid(x,y,z),1,mean)
[1] 23.00000 23.33333 23.33333 23.66667 23.33333 23.66667 23.66667 24.00000
x如果我理解正确,这应该很简单
apply(expand.grid(c(x1, x2), c(y1,y2), c(z1,z2)),1,fun)
编辑:添加示例
x <-c(13,14)
y <- c(21,22)
z<- c(35,36)
apply(expand.grid(x,y,z),1,mean)
[1] 23.00000 23.33333 23.33333 23.66667 23.33333 23.66667 23.66667 24.00000
x如果我理解正确,这应该很简单
apply(expand.grid(c(x1, x2), c(y1,y2), c(z1,z2)),1,fun)
编辑:添加示例
x <-c(13,14)
y <- c(21,22)
z<- c(35,36)
apply(expand.grid(x,y,z),1,mean)
[1] 23.00000 23.33333 23.33333 23.66667 23.33333 23.66667 23.66667 24.00000
x实际上,mappy
正是被问到的。它传递不同的参数,而不是单个向量。sum
函数可以接受任意数量的参数。您好,谢谢您的回答。我的问题可能不清楚。我对你的例子的预期结果是总共9个sum3(),它通过了三组中三个数字的所有组合。如果我的问题得到澄清,请告诉我。实际上,mapply
正是被问到的问题。它传递不同的参数,而不是单个向量。sum
函数可以接受任意数量的参数。您好,谢谢您的回答。我的问题可能不清楚。我对你的例子的预期结果是总共9个sum3(),它通过了三组中三个数字的所有组合。如果我的问题得到澄清,请告诉我。实际上,mapply
正是被问到的问题。它传递不同的参数,而不是单个向量。sum
函数可以接受任意数量的参数。您好,谢谢您的回答。我的问题可能不清楚。我对你的例子的预期结果是总共9个sum3(),它通过了三组中三个数字的所有组合。如果我的问题得到澄清,请告诉我。实际上,mapply
正是被问到的问题。它传递不同的参数,而不是单个向量。sum
函数可以接受任意数量的参数。您好,谢谢您的回答。我的问题可能不清楚。我对你的例子的预期结果是总共9个sum3(),它通过了三组中三个数字的所有组合。如果我的问题得到澄清,请告诉我。看到我的推理在某种程度上与经验丰富的堆栈溢出成员产生共鸣,我感到很高兴:)谢谢Flick先生。你得到了一个可复制的好例子,不是吗;)嗨,弗利克先生,我在问题上加了个例子,你的方法不太管用。您可以再看一看吗?在您的示例中,什么对应于x
和y
值的向量?我没有看到两个来源。您想要的函数调用的确切序列是什么?另外,我假设您的函数将被正确地向量化,但您的示例并非如此。这可以通过Vectorize()
来解决,但不清楚您想要的输出到底是什么。通常您一次只能打印一个绘图,而不需要做额外的工作,我希望x是列x1和x2,y是列y1和y2。我想通过指定I和j作为列号来调用它们。对于给定的数据,列x1和x2将由i=c(2,3)引用,列y1和y2将由j=c(4,5)引用。我希望这能澄清这个问题。我将研究函数矢量化。但是,有没有办法一次生成多个绘图?谢谢很高兴看到我的推理在某种程度上与经验丰富的堆栈溢出成员产生了共鸣:)谢谢Flick先生。你得到了一个可复制的好例子,不是吗;)嗨,弗利克先生,我在问题上加了个例子,你的方法不太管用。您可以再看一看吗?在您的示例中,什么对应于x
和y
值的向量?我没有看到两个来源。您想要的函数调用的确切序列是什么?另外,我假设您的函数将被正确地向量化,但您的示例并非如此。这可以通过Vectorize()
来解决,但不清楚您想要的输出到底是什么。通常您一次只能打印一个绘图,而不需要做额外的工作,我希望x是列x1和x2,y是列y1和y2。我想通过指定I和j作为列号来调用它们。对于给定的数据,列x1和x2将由i=c(2,3)引用,列y1和y2将由j=c(4,5)引用。我希望这能澄清这个问题。我将研究函数矢量化。但是,有没有办法一次生成多个绘图?谢谢看到我的推理在某种程度上与老练的stack overf产生共鸣,感觉很好