Windows10修改用户名后R语言rvest爬虫运行sapply出现工作目录报错
R爬虫sapply触发工作目录报错的解决步骤
修改Windows登录用户名只是间接导致RStudio默认工作目录配置失效,触发报错的核心是工作目录权限异常 + 爬取参数存在空值两个叠加问题,具体修复按以下步骤执行:
- 第一步:修正异常的工作目录配置
运行代码前先在R控制台执行getwd(),确认报错提示的C:/Program Files/RStudio是否为当前工作路径——这个路径是RStudio的程序安装目录,本身属于需要管理员权限的系统目录,本来就不适合作为R脚本的运行目录。
可以在脚本最开头手动设置合法的用户目录:比如setwd("C:/Users/你的新登录用户名/Documents/你的R项目文件夹"),避开Program Files这类无常规读写权限的系统路径。之前修改Windows登录名后,RStudio保存的旧用户目录路径失效,才会自动 fallback 到程序安装目录,这也是你怀疑改用户名是诱因的来源。 - 第二步:定位sapply触发空路径报错的直接原因
报错提示Error: '' does not exist in current working directory不是说工作目录本身损坏,是sapply循环调用get.SKU函数时,部分传入的链接参数是空字符串:
当用html_attr("href")提取商品链接时,页面里部分没有href属性的a标签会返回空值,这些空值被传到read_html()里时,函数会把空字符串识别成本地文件路径,尝试在当前工作目录下寻找这个路径为空的“文件”,自然就会抛出路径不存在的报错。 - 第三步:针对性修复代码逻辑,从根源消除报错
按代码顺序逐处修正问题:- 替换错误的包加载语句:原代码里的
library(string)是无效的,R没有名为string的独立包,直接删掉这行即可,需要的字符串处理功能可后续按需加载stringr包。 - 修正tibble生成的语法错误:原代码里写的
name <- tibble( prodotto= prodotto , title <- webpage %>% html_nodes(".product-title a") %>% html_text() )错误将赋值运算符<-写到了tibble参数内部,会导致生成的列值不符合预期,需要改成name <- tibble(prodotto = prodotto, title = webpage %>% html_nodes(".product-title a") %>% html_text()) - 提取商品链接时增加空值过滤:把原代码的
links_prod <- webpage %>% html_nodes(".product-title a") %>% html_attr("href")修改为links_prod <- webpage %>% html_nodes(".product-title a") %>% html_attr("href") %>% .[!is.na(.) & . != ""],把提取到的空值、NA值提前过滤掉,避免传入get.SKU函数。 - 提前初始化全局数据框:原代码在函数内直接用
rbind(tecno.data, ...)拼接数据,但从未定义过tecno.data对象,第一次运行就会触发对象不存在的报错,需要在函数外部提前执行tecno.data <- data.frame()完成初始化。
- 替换错误的包加载语句:原代码里的
- 第四步:临时验证sapply的传参正确性
过滤完链接后,可以单独运行links_prod查看输出值,确认所有值都是正常的商品URL字符串,没有空值、NA值,再运行后续的sapply循环逻辑。
注意:不要长期把工作目录设置在C:/Program Files/这类系统程序目录下,既容易触发权限报错,也可能导致RStudio无法正常保存脚本、缓存运行结果。
内容的提问来源于stack exchange,提问作者Stefano Maria De Francesco
相关产品推荐
相关产品推荐

