繁体   English   中英

R - 将多个对象返回到不同的(父)环境

[英]R - return multiple objects to a different (parent) environment

我正在编写一个函数,我将在其中返回几个对象。 通常的方法是将它们存储为列表并返回列表。 但是,这意味着我必须取消列表才能访问这些对象。

有没有办法将它们存储在函数本身之外的不同环境中?

我想我会直接在我的代码或其他函数中使用这个函数。 这个想法是将这些对象推送到直接父环境,因此如果我在另一个函数中执行此函数,则为一个函数,或者如果我在代码中内联执行该函数,则为全局环境。

最好的事物,


编辑:嗨,我添加了一个虚拟列表。 它实际上是我正在使用的数据。 第一个元素包含由函数修改后的数据集和一个包含添加的列名称的向量,我在代码中进一步使用。 为什么我首先问这个问题是我想提取数据集和向量,如果原始数据集或向量已经存在,它们将替换原始数据集或向量,如果它们不存在则创建它们。

我很可能会在一个将进一步使用它们的函数中调用它。 我通常会用一个循环来做这件事,但我更喜欢一个我可以随时调用的函数来做到这一点。

你会怎么做? 我尝试使用 unlist 但从未实现我所追求的目标。


list(dummy2 = structure(list(interaction = c("Rutilus rutilus<-Hydrachnidia", 
"Rutilus rutilus<-Hydrachnidia", "Rutilus rutilus<-Hydrachnidia", 
"Rutilus rutilus<-Hydrachnidia", "Rutilus rutilus<-Hydrachnidia", 
"Rutilus rutilus<-Hydrachnidia"), PREDATOR = c("Rutilus rutilus", 
"Rutilus rutilus", "Rutilus rutilus", "Rutilus rutilus", "Rutilus rutilus", 
"Rutilus rutilus"), PREY = c("Hydrachnidia", "Hydrachnidia", 
"Hydrachnidia", "Hydrachnidia", "Hydrachnidia", "Hydrachnidia"
), interaction_type = c("eats", "eats", "preysOn", "preysOn", 
"preysOn", "eats"), source = c("Globi", "Globi", "Globi", "Globi", 
"Globi", "Globi"), pred_prey_lifestage = c("NA<-NA", "larvae<-larvae", 
"larvae<-larvae", "larvae<-NA", "NA<-NA", "NA<-NA"), interaction_lifestage = c("NA<-NA", 
"larvae<-larvae", "larvae<-larvae", "larvae<-NA", "NA<-NA", "NA<-NA"
), pred_lifestage = c(NA, "larvae", "larvae", "larvae", NA, NA
), prey_lifestage = c(NA, "larvae", "larvae", NA, NA, NA), lat = c(NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_
), lon = c(NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_), ref = c("Rowan Dunn, D. (1954). The Feeding Habits of some of the Fishes and some Members of the Bottom Fauna of Llyn Tegid (Bala Lake), Merionethshire. Journal of Animal Ecology, 23(2), 224�233.", 
"Northcott, D. S., The role of aquatic macrophytes in the availabillty of food for young fish, 1981, PhD thesis, City of London Polytechnic, UK", 
"Northcott, D. S., The role of aquatic macrophytes in the availabillty of food for young fish, 1981, PhD thesis, City of London Polytechnic, UK", 
"Northcott, D. S., The role of aquatic macrophytes in the availabillty of food for young fish, 1981, PhD thesis, City of London Polytechnic, UK", 
"Northcott, D. S., The role of aquatic macrophytes in the availabillty of food for young fish, 1981, PhD thesis, City of London Polytechnic, UK", 
"Northcott, D. S., The role of aquatic macrophytes in the availabillty of food for young fish, 1981, PhD thesis, City of London Polytechnic, UK"
), data_provider = c("Gray C, Ma A, Perkins D, Hudson L, Figueroa D, Woodward G (2015). Database of trophic interactions. Zenodo. https://doi.org/10.5281/zenodo.13751. Accessed at <https://github.com/globalbioticinteractions/gray2015/archive/95bfd96cc46e5d58482fd2bdad0677eeb74ba0f4.zip> on 16 Feb 2020.", 
"Gray C, Ma A, Perkins D, Hudson L, Figueroa D, Woodward G (2015). Database of trophic interactions. Zenodo. https://doi.org/10.5281/zenodo.13751. Accessed at <https://github.com/globalbioticinteractions/gray2015/archive/95bfd96cc46e5d58482fd2bdad0677eeb74ba0f4.zip> on 16 Feb 2020.", 
"Gray C, Ma A, Perkins D, Hudson L, Figueroa D, Woodward G (2015). Database of trophic interactions. Zenodo. https://doi.org/10.5281/zenodo.13751. Accessed at <https://github.com/globalbioticinteractions/gray2015/archive/95bfd96cc46e5d58482fd2bdad0677eeb74ba0f4.zip> on 16 Feb 2020.", 
"Gray C, Ma A, Perkins D, Hudson L, Figueroa D, Woodward G (2015). Database of trophic interactions. Zenodo. https://doi.org/10.5281/zenodo.13751. Accessed at <https://github.com/globalbioticinteractions/gray2015/archive/95bfd96cc46e5d58482fd2bdad0677eeb74ba0f4.zip> on 16 Feb 2020.", 
"Gray, C., Ma, A., Perkins, D., Hudson, L., Figueroa, D., & Woodward, G. (2015). Database of trophic interactions [Data set]. Zenodo. http://doi.org/10.5281/zenodo.13751. Accessed at <https://zenodo.org/record/13751/files/trophic.links.2014-11-10.csv> on 16 Feb 2020.", 
"Gray, C., Ma, A., Perkins, D., Hudson, L., Figueroa, D., & Woodward, G. (2015). Database of trophic interactions [Data set]. Zenodo. http://doi.org/10.5281/zenodo.13751. Accessed at <https://zenodo.org/record/13751/files/trophic.links.2014-11-10.csv> on 16 Feb 2020."
)), row.names = c(351L, 361L, 362L, 366L, 376L, 377L), class = "data.frame"), 
    dummy2.addi = c("interaction", "interaction_lifestage"))

是的,有可能这样做:

assign(x, value, pos = -1, envir = as.environment(pos),
       inherits = FALSE, immediate = TRUE)

另一种可能是

foo <- function(){
    someVariableInParentEnvironment <<- 5
}

assign()可以写入您想要的任何环境。

然而

在你这样做之前,你真的应该考虑一下。 我建议不要这样做,除非在只有您使用的小脚本中的小函数中。 问题是您忽略了哪个变量存在的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM