【发布时间】:2020-07-13 02:17:55
【问题描述】:
我是 R 的新手,所以请耐心等待...欢迎提供建议。
我的目标是创建包含“全名”(一个人,可能有 2 到 4 个名字)和他/她的性别的 tibble。我必须从包含典型男性和女性名字的小标题开始。
下面我给出一个最小的工作示例。
我的问题:我可以多次调用get_name()(在 10.000 for 循环中!!)并得到正确答案。但是,我一直在寻找一种更“优雅”的方式。 replicate() 不幸地返回了一个向量......这使它无法使用。
我的疑虑:我知道我有一些(很少......对!!)问题,比如 if 声明,每次都会评估(这是多余的),但我没有找到其他方法做。有什么建议吗?
也欢迎任何其他关于代码结构的建议。
非常感谢您的帮助。
# Dummy name list
unit_names <- tribble(
~Women, ~Man,
"fem1", "male1",
"fem2", "male2",
"fem3", "male3",
"fem4", "male4",
"fem5", "male5",
"fem6", NA,
"fem7", NA
)
set.seed(12345) # seed for test
# Create a tibble with the full names
full_name <- tibble("Full Name" = character(), "Gender" = character() )
get_name <- function() {
# Get the Number of 'Unit-names' to compose a 'Full-name'
nbr_names <- sample(2:4, 1, replace = TRUE)
# Randomize the Gender
gender <- sample(c("Women", "Man"), 1, replace = TRUE)
if (gender == "Women") {
lim_names <- sum( !is.na(unit_names$"Women"))
} else {
lim_names <- sum( !is.na(unit_names$"Man"))
}
# Sample the Fem/Man List names (may have duplicate)
sample(unlist(unit_names[1:lim_names, gender]), nbr_names, replace = TRUE) %>%
# Form a Full-name
paste ( . , collapse = " ") %>%
# Add it to the tibble (INCLUDE the Gender)
add_row(full_name, "Full Name" = . , "Gender" = gender)
}
# How can I make 10k of this?
full_name <- get_name()
【问题讨论】: