r - 根据输入文件在 R 中创建新对象,其中包含有关这些对象的信息
问题描述
假设我有以下查找表:
object_lookup <- data.frame(name = c(new_var_1, new_var_2, new_var_2),
value = c(7, "ABC", "XYZ"),
type = c("numeric", "character", "character"))
我现在想浏览该列表并根据值创建对象,根据列为name
它们分配值,value
并希望确保它们具有type
.
我知道如何使用 一次创建一个新对象assign
,但我正在努力解决 a) 自动化流程和 b) 确保类型正确和 c) 如何处理假定多个值的情况被分配。我在这里想到了某种应用功能?
某事。像apply(object_lookup, 1, function(x) {assign(name, value); if (type == "numeric) as.numeric(x)}
最终,我希望在该示例中有两个新的 R 对象:
new_var_1 <- c(7) # numeric
new_var_2 <- c("ABC", "XYZ") # character
有任何想法吗?
解决方案
你的第一列data.frame
应该是字符向量,然后你可以尝试这样的事情:
library(dplyr)
library(purrr)
object_lookup %>%
mutate(across(everything(), as.character)) %>%
group_by(name) %>%
summarise(value = list(value), type = unique(type)) %>%
{if(any(count(., name)$n > 1)) stop("wrong input") else .} %>%
mutate(value = map2(value, type, ~do.call(paste0("as.", .y), args = list(.x)))) %>%
select(name, value) %>%
pwalk(~assign(.x, .y, envir = globalenv()))
stop
如果输入错误是否存在(不同类型的相同变量)
推荐阅读
- wcf - 服务证书 WCF 服务
- git - .gitattributes 中的文件扩展
- python - Scipy的csr_matrix按值排序?
- asp.net-core - 我的应用程序(在 Docker 容器中)如何访问 MongoDb(在我的主机上)?
- latex - 去掉标题页Latex的背景图片
- docker - Docker 图像会自动存储在 docker hub 中吗?
- python - selenium + python - 找到一个元素并移动到一个可点击的链接
- elasticsearch - 无法从 ES 获得任何结果。没有错误
- php - PHPUnit 不打开没有“.php”后缀的文件
- c - 如何在 c 中为线性同余生成器 LCG 实现模数 2^64