我的代码:
if (data == null) {
data <- read.csv(file)
}
从大数据文件中读取,这就是为什么只读一次它会很好。
答案 0 :(得分:1)
您可以使用exists()
,但您还应该确保使用R可能找不到的数据集名称。data()
是R中的函数,因此它是&#39 ;分配给您正在加载的数据并不是一个好名字。
尽管如此,您可以采用以下方式:
ls() ## I'm starting with nothing in my workspace
# character(0)
## Here's how you can check if something exists
if (!(exists("data") & is.data.frame(data))) {
## Replace print("boo") with whatever you actually want to do--
## Read data, load data, whatever
print("boo")
} else {
## If it does exist, you don't really need to do anything
## Except proceed with your script
head(data)
}
# [1] "boo"
如果我们的环境中有data.frame
,就会发生什么(就像您已经阅读过它一样)。
data <- data.frame(V1 = 1:10, V2 = 11:20)
ls()
# [1] "data"
if (!(exists("data") & is.data.frame(data))) {
print("boo")
} else {
head(data)
}
# V1 V2
# 1 1 11
# 2 2 12
# 3 3 13
# 4 4 14
# 5 5 15
# 6 6 16
正如其他人所提到的那样,你也可以考虑将数据保存在一个&#34; rdata&#34;或&#34; rds&#34;可以快速加载的格式。
答案 1 :(得分:0)
您可以检查数据是否已具有某些属性(例如类)或是否存在。第一种解决方案很简单但技术上不正确;根据您的环境和变量名称,第二种解决方案有时会很棘手
## Creating data
test1 <- c(1:5, "6,7", "8,9,10")
file <- tempfile()
writeLines(test1, file)
if (!exists("data")) {
data <-read.csv(file)
}
## Check an attribute (e.g. the class)
check_class <- try(class(data), silent = TRUE)
## Check if the data existed (i.e. had an attribute or not)
if (class(check_class) == "try-error") {
data1 <-read.csv(file)
}