存储在循环中的动态变量名称(r)

时间:2019-04-07 03:16:49

标签: r dataframe for-loop variables

我正在尝试使用循环来操纵多个文件,而且还要在每个循环周期中保留变量/输出的名称。

以下是我要执行的操作的示例:

['very low', 'very low', 'low', 'low', 'medium', 'medium', 'medium', 'high', 'very high', 'very high']

所以我现在要拥有六个可以调用的变量(最后三个是数据帧)。显然,我实际上要做的是一遍又一遍地覆盖#define my source SourceDir <- file.path('where/it/is') #define my array Wpns <- ('Bren', 'Welrod', 'Vickers') #start for-loop for (Wpn in Wpns){ #example of for loop contents 1 (is this a sensible way to get a file path?) WpnFile <- file.path(paste0(SourceDir, '/My'_, Wpn, '_File.txt') #example of for loop contents 2 WpnDataFrame <- read_delim(WpnFile, ' ') } WpnFile

WpnDataFrame

这是我第一次使用r,所以如果我写的东西(或者也许我想要实现的东西)看起来很奇怪,我也不会感到惊讶。

(对于某些上下文,如果要紧:我试图操作然后从文本文件中绘制数据。但是,我确实需要检查for循环的每个阶段(例如,我创建的数据框架),这样我就可以检查自己在做什么。这也是帮助我可视化所做更改的关键,因为我不习惯使用矩阵,而且以后可能需要返回到特定的数据帧。)

1 个答案:

答案 0 :(得分:1)

因此,如果我做对了,您想在循环中将文件名添加到源中,然后加载相应的数据。如果是这样,我建议您这样做

# define my source
SourceDir <- file.path('where/it/is') # unchanged

#define my array
Wpns <- c('Bren', 'Welrod', 'Vickers') # you must use c()

# creating an empty list for your data being loaded
WpnDataFrame <- mylist <- vector("list", length(Wpns))
# naming the list
names(WpnDataFrame) <- Wpns

# creating a vector for the file paths
WpnFile <- rep(NA, length(Wpns))

# i can not show it with real data since my pc has other file paths then yours so here is some data for demonstration
df <- 1:3

# running for loop
for(i in 1:length(Wpns)){
# saving each file path
WpnFile[i] <- file.path(paste0(SourceDir, '/My_', Wpns[i], '_File.txt'))

# loading the data
# for demonstration:  
WpnDataFrame[[Wpns[i]]] <- df[i] 
# you want to do this: 
# WpnDataFrame[[Wpns[i]]] <- read_delim(WpnFile, ' ')
}

这给你

WpnFile
[1] "where/it/is/My_Bren_File.txt"    
"where/it/is/My_Welrod_File.txt" 
[3] "where/it/is/My_Vickers_File.txt"

WpnDataFrame
$Bren
[1] 1
$Welrod
[1] 2
$Vickers
[1] 3

一些注意事项:我使用WonDataFrame的类列表是因为我不确定所加载的数据是否具有相同的格式(相同的列数,相同的列数)。在一个列表中,一个df是否具有3列而另一个df是否具有4列并不重要。