在R中基于用户输入合并数据

在R中基于用户输入合并数据,r,R,我正在尝试编写一个函数,该函数根据用户输入组合数据 我四处搜索,但找不到任何似乎有用的东西(我对使用R有些陌生) 分别运行每一行非常好。但是,当我将它们包装到已使用的定义函数中时,不会产生任何结果。例如,我有以下数据:ASW1_2016、ASW_2017、ASW_2018、CSW_2015、CSW_2017。我想提示用户输入一个站点名称“ASW1”,并让函数组合包含此名称的所有数据 #Running these two lines separately works: Site <- inv

我正在尝试编写一个函数,该函数根据用户输入组合数据

我四处搜索,但找不到任何似乎有用的东西(我对使用R有些陌生)

分别运行每一行非常好。但是,当我将它们包装到已使用的定义函数中时,不会产生任何结果。例如,我有以下数据:ASW1_2016、ASW_2017、ASW_2018、CSW_2015、CSW_2017。我想提示用户输入一个站点名称“ASW1”,并让函数组合包含此名称的所有数据

#Running these two lines separately works:
Site <- invisible(readline(prompt = "Enter Site Name:"))

assign(Site, rbindlist(mget(apropos(Site), inherits = TRUE))

#Putting these two lines into a function does not produce anything:
CombineData <- function()

{

Site <- invisible(readline(prompt = "Enter Site Name:"))

assign(Site, rbindlist(mget(apropos(Site), inherits = TRUE))

}

CombineData()
#分别运行这两行可以:

默认情况下,在函数内调用的Site
assign
在函数的环境中而不是在全局环境中进行赋值。因此,基本上,这就像将结果存储在函数中的变量中一样。函数返回后,该值将丢失。以下说明了这一点(基本上就是您正在做的事情):


也就是说,使用
assign
来存储值通常不是在R中存储数据的首选方式(您可以在上一页了解更多)。如果将代码存储在列表中,您可能会发现维护代码更容易。例如,如果您有一个初始列表
l,谢谢您的解决方案!分配全球环境有效。我还尝试了你的列表建议,因为根据你的评论和你提供的链接,列表似乎是一个更好的选择。然而,当我使用l[[Site]]@bmdanhof时,我不确定,但是如果你发布了一个新问题,并用一个可复制的例子来说明这个问题,那么我相信有人可以提供帮助。确保您的问题包含示例数据,以便此站点上的用户可以运行代码并查看您描述的问题。
fxn <- function() assign("xyz", 1)
fxn()
print(xyz)
# Error in print(xyz) : object 'xyz' not found
fxn <- function() assign("xyz", 1, envir = .GlobalEnv)
fxn()
print(xyz)
# [1] 1