purrr函数内部的点机制
让我从一个玩具数据集开始purrr函数内部的点机制,r,purrr,R,Purrr,让我从一个玩具数据集开始 library(magrittr) library(purrr) set.seed(13) X<-matrix(rnorm(120),20,6) %>% data.frame %>% set_colnames(LETTERS[1:5]) 现在我给它添加了点机制: foo<-function(X,...){ win.graph(5,5) par(mfcol=c(3,2)) par(mar=c(5,4,.1,.1)) X %>
library(magrittr)
library(purrr)
set.seed(13)
X<-matrix(rnorm(120),20,6) %>% data.frame %>% set_colnames(LETTERS[1:5])
现在我给它添加了点机制:
foo<-function(X,...){
win.graph(5,5)
par(mfcol=c(3,2))
par(mar=c(5,4,.1,.1))
X %>% iwalk(~plot(.x, rnorm(20), xlab=.y, ylab='Random',...))
}
现在
foo(X)
和foo(X,pch=2)
在plot.xy(xy,type,…)中出现错误:无效的plot类型
…我们可以这样做do.call
foo <- function(X, ...){
v1 <- c(...)
win.graph(5,5)
par(mfcol=c(3,2))
par(mar=c(5,4,.1,.1))
X %>%
iwalk(~ {args <- list(xlab = .y, ylab = 'Random')
args[names(v1)] <- v1
do.call(plot, c(list(x = .x, y = rnorm(20)), args))
})
}
foo(X)
foo(X, cex = 2)
foo(X, pch = 2)
foo(X, cex = 2, pch = 2)
foo(X, cex = 2, pch = 2, col = 2)
foo感谢您的解决方案(+1)。但是,它是有效的,我想到了一些更像tidyverse
-的东西。请参阅我对我的问题所做的编辑。
foo<-function(X, ...){
win.graph(5,5)
par(mfcol=c(3,2))
par(mar=c(5,4,.1,.1))
vars<-quos(...)
X %>% iwalk(~plot(.x, rnorm(20),xlab=.y, ylab='Random', !!! vars))
}
foo <- function(X, ...){
v1 <- c(...)
win.graph(5,5)
par(mfcol=c(3,2))
par(mar=c(5,4,.1,.1))
X %>%
iwalk(~ {args <- list(xlab = .y, ylab = 'Random')
args[names(v1)] <- v1
do.call(plot, c(list(x = .x, y = rnorm(20)), args))
})
}
foo(X)
foo(X, cex = 2)
foo(X, pch = 2)
foo(X, cex = 2, pch = 2)
foo(X, cex = 2, pch = 2, col = 2)