gpt4 book ai didi

r - 使用 purrr::map 将多个参数应用于函数

转载 作者:行者123 更新时间:2023-12-04 10:30:50 24 4
gpt4 key购买 nike

我有一个这样的数据框

   df <- data.frame(tiny = rep(letters[1:3], 20), 
block = rnorm(60), tray = runif(60, min=0.4, max=2),
indent = sample(0.5:2.0, 60, replace = TRUE))

我嵌套了这个数据框
nm <- df%>%
group_by(tiny)%>%
nest()

然后写了这些函数
library(dplyr)
library(purrr)
library(tidyr)

model <- function(dfr, x, y){
lm(y~x, data = dfr)
}

model1 <- function(dfr){
lm(block~tray, data = dfr)
}

我想为所有小类(class)运行这个模型,所以我做了
 nm%>%
mutate(
mod = data %>% map(model1)
)

上面的代码工作正常,但如果我想提供变量作为参数,就像我在 model1 函数中那样,我会得到错误。这就是我所做的
 nm%>%
mutate(mod = data %>% map(model(x=tray, y=block)))

我不断收到错误 Error in mode(x = tray, y = block) : unused argument (y = block)

我也尝试使用 ggplot2 绘制这些
plot <- function(dfr, i){
dfr %>%
ggplot(., aes(x=tray, y=block))+
geom_point()+
xlab("Soil Properties")+ylab("Slope Coefficient")+
ggtitle(nm$tiny[i])

nm%>%
mutate(put = data %>% map(plot))

这个想法是我希望 ggplot 为将要生成的每个图放置标题 a、b 和 c。
任何帮助将不胜感激。谢谢

最佳答案

使用基本函数 split 将数据拆分为组列表。

library( purrr )
library( ggplot2 )
df %>%
split( .$tiny) %>%
map(~ lm( block ~ tray, data = .))

df %>%
split( .$tiny) %>%
map(~ ggplot( data = ., aes( x = tray, y = block ) ) +
geom_point( ) +
xlab("Soil Properties") +
ylab("Slope Coefficient") +
ggtitle( as.character( unique(.$tiny) ) ) )

使用函数:
lm_model <- function( data ) 
{
return( lm( block ~ tray, data = data ) )
}

plot_fun <- function( data )
{
p <- ggplot( data = data, aes( x = tray, y = block ) ) +
geom_point( ) +
xlab("Soil Properties") +
ylab("Slope Coefficient") +
ggtitle( as.character( unique(data$tiny) ) )

return( p )
}

df %>%
split( .$tiny) %>%
map(~ lm_model( data = . ) )

df %>%
split( .$tiny) %>%
map(~ plot_fun( data = . ) )

在函数 中创建公式
lm_model <- function( data, x, y ) 
{
form <- reformulate( y, x )

return( lm( formula = form, data = data ) )
}

df %>%
split( .$tiny) %>%
map(~ lm_model( data = ., x = 'tray', y = 'block' ) )

如果您的函数公式如下,您的解决方案就会奏效。
model <- function(dfr, x, y){
lm( formula = eval(parse(text = paste('as.formula( ', y, ' ~ ', x, ')', sep = ''))),
data = dfr)
}

关于r - 使用 purrr::map 将多个参数应用于函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42518156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com