如何在第一次运行脚本时读取csv?

时间:2018-02-21 03:48:53

标签: r rstudio

我的代码:

if (data == null) {
   data <- read.csv(file)
}

从大数据文件中读取,这就是为什么只读一次它会很好。

2 个答案:

答案 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)

解决方案1 ​​

if (!exists("data")) {
   data <-read.csv(file)
}

解决方案2

## 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)
}