R 中代码的可读性:如何避免 get() 和 allocate()

问题描述 投票:0回答:1

我读过几个主题,其中用户建议不要使用

get()
assign()
函数,因为它会改变代码的可读性,我不能否认这一点(例如 here)。 但后来我有点迷失了良好的做法。

我当前有一个示例:我有一个 pdf,其中包含有关多个国家/地区的表格,我将其作为数据框导入

CF_Brut_pdftools
。 我的国家/地区列表是
ListePays=c("US","JP","DE","FR","UK","IT","CA","ZE","NL","NO","ES","SE","CH") 

我已经有了每个国家/地区要使用的页面列表。所以我愿意

for (Pays in ListePays){
  assign(paste("CF",Pays,sep="_"),CF_Brut_pdftools[get(paste("Page",Pays,sep="_"))])
}

我有一些数据操作,例如:

for (Pays in ListePays2){
  assign(paste("CF",CF,"2",sep="_"),as.list(strsplit(get(paste("CF",Pays,sep="_")), "\n") [[1]]))
}

这将持续几个步骤

还有什么比这种方式更好的选择?

在这种情况下拥有 MWE 并不简单,但如果有帮助的话我可以做一个。

r get naming-conventions assign readability
1个回答
0
投票

如果没有示例就很难说,但答案通常是使用命名列表。

假设您有一个国家/地区列表

ListePays=c("美国","日本","德国","法国","英国","意大利","加拿大","泽国","荷兰","否","西班牙"," SE”,“CH”)

并且您希望将 CF_Brut_pdftools(country_name) 的结果存储在可以轻松恢复的地方。

答案不是不创建环境变量“result_US”和“result_JP”。 相反,您想要创建一个名为“result”的列表,其中名为“US”的元素包含 CF_Brutpdftools(“US”) 的输出。

要恢复结果,您只需检索结果[[“US”]]

如何创建该列表取决于您。我通常像这样使用 purrr::map() :

结果<- purrr::map(ListePays, ~ CF_brutpdftools(.x))

© www.soinside.com 2019 - 2024. All rights reserved.