我读过几个主题,其中用户建议不要使用
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 并不简单,但如果有帮助的话我可以做一个。
如果没有示例就很难说,但答案通常是使用命名列表。
假设您有一个国家/地区列表
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))