我对mgetget的工作方式有点困惑

我使用lapply来读取多个数据帧(df1、df2)并执行操作,但是当我使用get时,对象将被读取,但如果我将其替换为mget,它将无法工作,不确定原因

我注意到的是,如果我使用get,则会在全局环境中搜索数据帧并将其作为数据帧读取,但是如果我使用mget,则对象将作为列表读取,因此进一步的代码无法工作

df1 <- tribble(
~City_Name,  ~Temp,  ~Pres,  ~Wind_Hor, ~Wind_Ver,  ~S_Moist,  ~Temp1, ~Pres1,  ~Wind1,  ~S_Moist1,
'Mi',  27,  1019,  287,  278,  78,  1,  2,  2,  1,
'Mi',  28,  1019,  289,  277,  78,  2,  2,  1,  3
)

df2 <- tribble(
  ~City_Name,  ~Temp,  ~Pres,  ~Wind_Hor, ~Rainf,  ~S_Moist,  ~Temp1, ~Pres1,  ~Wind1,  ~S_Moist1,
  'Mi',  27,  1019,  287,  278,  78,  1,  2,  2,  1,
  'Mi',  28,  1019,  289,  277,  78,  2,  2,  1,  3
)

dfs1 <- c('df1','df2')

var <- c('City_Name',  'Temp',  'Pres' , 'Wind_Hor' , 'Wind_Ver' , 'Rainf' , 'S_Moist')

lapply(dfs1, \(x) {
  dfn <- mget(x, envir = .GlobalEnv, inherits = T)
  dfn[[var[which(is.na(match(var,names(dfn))))]]] <- NA
  dfn <- dfn %>% select(all_of(var))
  return(assign(x,dfn,envir = .GlobalEnv))
})

推荐答案

get用于仅查找一个变量并返回存储在该变量中的值,而mget用于查找多个变量并以列表形式返回它们.你想要做的事情可以简化为

lapply(mget(dfs1), \(x) `[<-`(x, setdiff(var, names(x)), value = NA)[var]) |>
   list2env(.GlobalEnv)


df1
# A tibble: 2 × 7
  City_Name  Temp  Pres Wind_Hor Wind_Ver Rainf S_Moist
  <chr>     <dbl> <dbl>    <dbl>    <dbl> <lgl>   <dbl>
1 Mi           27  1019      287      278 NA         78
2 Mi           28  1019      289      277 NA         78

df2
# A tibble: 2 × 7
  City_Name  Temp  Pres Wind_Hor Wind_Ver Rainf S_Moist
  <chr>     <dbl> <dbl>    <dbl> <lgl>    <dbl>   <dbl>
1 Mi           27  1019      287 NA         278      78
2 Mi           28  1019      289 NA         277      78

R相关问答推荐

根据R中另一个数据集的顺序重新排序数据集的列

R -创建一列,指示另一列是否具有相同的值

如何计算新变量中的通货inflating 率?

生成具有受控相关性的x和y

使用lares::corr_var函数在for循环中分配变量的问题

在图内移动y轴上的标签

导入到固定列宽的R中时出现问题

给定R中另一行中的值,如何插补缺失值

无法在我的情节中表现出显着的差异

计算R中的威布尔分布的EDF

使用列/行匹配将两个不同维度的矩阵相加

矩阵的堆叠条形图,条形图上有数字作为标签

提取一个列表中单个列的重复观察结果R

根据列A中的差异变异列,其中行由列B中的相对值标识

LOF中的插图短文字幕

如何将网站图像添加到带有极坐标的面包裹条形图?

派生程序包| ;无法检索';return()';的正文

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

如何获取R chromote中的当前URL?

附加中缀操作符