见下文
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字符串而不是变量。
答案 0 :(得分:1)
考虑使用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)