【发布时间】:2020-08-30 00:31:12
【问题描述】:
我有一个名为make_data 的用户定义函数用于创建数据集。
我需要使用make _data 和mu_1 <- seq(1:3) 生成3 个不同的数据集。我不知道怎么用sapply,因为make_data函数有多个参数,
library(dplyr) # for `%>%` and `slice`
library(caret) # for createDataPartion
make_data <- function(n = 1000, p = 0.5,
mu_0 = 0, mu_1 = 2,
sigma_0 = 1, sigma_1 = 1){
y <- rbinom(n, 1, p)
f_0 <- rnorm(n, mu_0, sigma_0)
f_1 <- rnorm(n, mu_1, sigma_1)
x <- ifelse(y == 1, f_1, f_0)
test_index <- createDataPartition(y, times = 1, p = 0.5, list = FALSE)
list(train = data.frame(x = x, y = as.factor(y)) %>% slice(-test_index),
test = data.frame(x = x, y = as.factor(y)) %>% slice(test_index))
}
使用 sapply 函数
mu_1 <- seq(0, 3)
dat_3<- sapply(mu_1,make_data)
我收到如下所示的错误报告。
createDataPartition(y, times = 1, p = 0.5, list = FALSE)中的错误: y 必须至少有 2 个数据点。
【问题讨论】:
-
第一次调用
make_data是用n=0,所以你有效地执行rbinom(0, 1, p),它返回一个长度为0 的向量。你希望如何在零数据上创建一个分区? (同样,1 是不够的,因为错误表明它需要 “至少 2 个数据点”。我会以mu_1 <- seq(2, 4)或类似的开头。 -
对于
mu1为 0 或 1,您的函数将执行... createDataPartition(0, times = 1, p = 0.5, list = FALSE) ...,这似乎会引发错误。 -
@r2evans 那么我应该在 'sapply' 函数中再次定义所有参数吗?