将字符串作为变量分配给数据框

Assigning strings to a data frame as variables

见下文

for(stockName in c("AAPLstock", "FBstock", "GOOGstock", "HPQstock", "MSFTstock", "YHOOstock")){
assign(paste(stockName), read.table(paste(stockName,'.txt', sep = ""), quote="\"", comment.char=""))  }

这会创建这些变量。这很酷

ls(pattern = "stock")
[1] "AAPLstock" "FBstock"   "GOOGstock" "HPQstock"  "MSFTstock"
[6] "stockName" "YHOOstock"

当我尝试将它们全部分配给如下所示的数据框时

df<-list(ls(pattern = "stock"))
> df
[[1]]
[1] "AAPLstock" "FBstock"   "GOOGstock" "HPQstock"  "MSFTstock"
[6] "stockName" "YHOOstock"

我想要的是 df 将这些股票包含为变量,而不是字符串。所以下面的函数给了我想要的结果

df <- list(AAPLstock, FBstock, GOOGstock, HPQstock, MSFTstock, YHOOstock)

但这需要我输入所有变量。问题是,我打算这样做,但有更多的股票,我不想输入 100 个变量的名称,而且更改起来会很痛苦。因此,我想要一种使用 ls() 或类似方法将表示变量的字符串分配给数据框的方法。

我试过 Parse 和 assign,但他们仍然分配 df 字符串而不是变量。

考虑使用 mget() 通过字符串引用拉取多个变量。

df <- data.frame(mget(ls(pattern = "stock")), stringsAsFactors =  FALSE)

但如前所述,还可以考虑构建一个 运行 股票列表并将 rbind 绑定到数据框:

stockName <- c("AAPLstock", "FBstock", "GOOGstock", "HPQstock", "MSFTstock", "YHOOstock")
listOfStocks <- lapply(stockName, 
                       function(s) { 
                             read.table(paste(s,'.txt', sep = ""), 
                                        quote="\"", comment.char="")
                       })
df <- do.call(rbind, listOfStocks)