我是R的新手,我正在尝试访问循环外的数据
# List of 100 stock data
a <-c ("one", "two", "three", "four",...)
i = 1
while (i <= length(a)) {
# make a list_element.csv to be accessed from local storage
formated_path <-paste(a[i], ".csv")
if (!file.exists(formated_path)) {
output <- paste("Data for ", a[i], "Not found!")
print(output)
} else {
print("found")
a[i] <- read.csv(formated_path, header = TRUE)
# I have tried to change the name of the array to
# correspond to the element name but no luck as
paste(a[i], "_stock") <-read.csv(formated_path, header = TRUE)
return(a[i])
i = i + 1
}
}
我希望的结果是能够将单独加载的.csv
与循环外的其他函数一起使用。我不想要一个多维数组,只需要对应于数组元素的单个数组:
# Desired output
print(one) # Should be the elements of a
答案 0 :(得分:0)
如果您真的想要追求自己的方法,那么您正在寻找的功能称为assign
。不过,我想鼓励您以不同的方式思考您的问题:
a <- c("one", "two", "three", "four")
fileNames <- paste0(a, ".csv")
csvList <- lapply(fileNames, read.csv)
str(csvList)
您可以利用Rs的能力处理向量(paste
)和函数式编程(lapply
),而不是问题中的命令式方法。
如果您需要进一步处理丢失的文件,可以定义一个包含该逻辑的新read.csv
函数:
myReadCsv <- function(fileName) {
if (file.exists(fileName){
read.csv(fileName)
} else {
message("File does not exist and is ignored")
NULL
}
}
在lapply
的调用中使用它。您可以在Advanced R中找到详细说明。