使用for循环创建目录

时间:2019-09-08 15:53:36

标签: r csv

enter image description here enter image description here在运行新脚本时,我继续遇到无效的'path'参数。我在导入的.csv中有一个状态列表,并且正在为dir.create写一个for循环。

我尝试了多种方法来编写此代码,但无法正常工作。我可以通过简单地编写dir.create(“ new”)来成功创建目录,但是当我在for循环中使用变量时,它不会创建。

library(rvest)
library(dplyr)
library(tm)
library(stringi)
library(readr)

states = read.csv('C:/Users/mike/Desktop/Housing_Data/states/stateslist.csv', header = TRUE)

for(state in states){
  print(as.character(state))
  setwd('C:/Users/mike/Desktop/Housing_Data/states/')
  dir.create(paste0('C:/Users/mike/Desktop/Housing_Data/states/', state))
}

我希望会创建新目录,但会遇到路径错误

2 个答案:

答案 0 :(得分:1)

在我的示例states$state中,您需要遍历数据框的列,在您的数据框中,该框应为states$states。 这对我有用:

states <- data.frame(state = c("foo", "bar"))

setwd('C:/Users/mike/Desktop/Housing_Data/states/')
for(state in states$state){
  print(as.character(state))

  dir.create(state)
}

替代:不使用setwd()

states <- data.frame(state = c("foo", "bar"))

for(state in states$state){

  print(as.character(state))

  dir.create(paste0('C:/Users/mike/Desktop/Housing_Data/states/', state))
}

答案 1 :(得分:-1)

使用sapply()进行矢量化比使用for循环要快得多。

directory <- 'C:/Users/Benjamin/Documents/States/'
states <- c(
  'Alabama',
  'Alaska',
  'Arizona',
  'Arkansas',
  'California',
  'Colorado',
  'Connecticut',
  'Delaware',
  'Florida',
  'Georgia',
  'Hawaii',
  'Idaho',
  'Illinois',
  'Indiana',
  'Iowa',
  'Kansas',
  'Kentucky',
  'Louisiana',
  'Maine',
  'Maryland',
  'Massachusetts',
  'Michigan',
  'Minnesota',
  'Mississippi',
  'Missouri',
  'Montana',
  'Nebraska',
  'Nevada',
  'New Hampshire',
  'New Jersey',
  'New Mexico',
  'New York',
  'North Carolina',
  'North Dakota',
  'Ohio',
  'Oklahoma',
  'Oregon',
  'Pennsylvania',
  'Rhode Island',
  'South Carolina',
  'South Dakota',
  'Tennessee',
  'Texas',
  'Utah',
  'Vermont',
  'Virginia',
  'Washington',
  'West Virginia',
  'Wisconsin',
  'Wyoming'
)
sapply(states, function(x) { dir.create(paste0(directory, x)) })