首页 > 解决方案 > 根据输入文件在 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

有任何想法吗?

标签: rassign

解决方案


你的第一列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如果输入错误是否存在(不同类型的相同变量)


推荐阅读