"Argument is of length zero" grepl 循环错误
"Argument is of length zero" error with grepl loop
我在涉及 grepl 的循环中遇到问题。我正在尝试打印包含字符串 "Taxable Revenue by Area" 的索引,但我不断收到错误参数长度为零的错误。我尝试了不同的方法,但一直出错。当我检查 grepl 语句的长度时,它是 1,而不是零。我真的卡住了! nevlists 是一个数据帧列表。每个数据框都由数字 1-48 命名,因此 nevlists 的长度为 48。当我 运行 grepl 语句单独使用我想要的页面时: grepl("Taxable Revenue by Area", nevlists$' 48'[3,] 它的计算结果为 TRUE,这正是我要寻找的。无论出于何种原因,我都无法使它适应循环。
library(readr)
library(stringr)
library(magrittr)
library(dplyr)
library(tidyr)
library(pdftools)
nvsr65_05 <- pdf_text("https://gaming.nv.gov/modules/showdocument.aspx?documentid=13542")
getstats<- function(nvsr65_05){
listofdfs <- list() #Create a list in which you intend to save your df's.
for (i in 1:length(nvsr65_05)) {
table_data2 <- nvsr65_05[[i]] %>%
str_split(pattern = "\n")
table_data2 <- data.frame(matrix(unlist(table_data2)))
listofdfs[[i]] <- table_data2
}
return(listofdfs)
}
nevlists <- getstats(nvsr65_05)
names(nevlists) <-c(1:48)
for (i in 1:length(nevlists)) {
if(grepl("Taxable Revenue by Area", nevlists$'i'[3,]) == TRUE){
print(i)}}
#Try2
for (i in 1:length(nevlists)) {
if(as.numeric(grepl("Taxable Revenue by Area", nevlists$'i'[3,])) > 0){
print(i)}}
我不是 100% 确定,但我认为这是由于您的索引方式所致 - 尝试:
for (i in names(nevlists)) {
# Get the index as a character instead of numeric
# in case your names are something other than pure numbers as
# in this example
ix = paste(i)
if (grepl("Taxable Revenue by Area", nevlists[[ix]][3, ]) == TRUE) {
print(ix)
}
}
这只会为我打印“48”——这是您所期望的吗?
如果您实际上并不关心列表项的名称,则完全可以忽略列表项的命名,只需执行以下操作:
for (i in 1:length(nevlists)) {
if (grepl("Taxable Revenue by Area", nevlists[[i]][3, ]) == TRUE) {
print(i)
}
}
输出一个数字索引值,这可能更有用,具体取决于您所追求的内容。
我在涉及 grepl 的循环中遇到问题。我正在尝试打印包含字符串 "Taxable Revenue by Area" 的索引,但我不断收到错误参数长度为零的错误。我尝试了不同的方法,但一直出错。当我检查 grepl 语句的长度时,它是 1,而不是零。我真的卡住了! nevlists 是一个数据帧列表。每个数据框都由数字 1-48 命名,因此 nevlists 的长度为 48。当我 运行 grepl 语句单独使用我想要的页面时: grepl("Taxable Revenue by Area", nevlists$' 48'[3,] 它的计算结果为 TRUE,这正是我要寻找的。无论出于何种原因,我都无法使它适应循环。
library(readr)
library(stringr)
library(magrittr)
library(dplyr)
library(tidyr)
library(pdftools)
nvsr65_05 <- pdf_text("https://gaming.nv.gov/modules/showdocument.aspx?documentid=13542")
getstats<- function(nvsr65_05){
listofdfs <- list() #Create a list in which you intend to save your df's.
for (i in 1:length(nvsr65_05)) {
table_data2 <- nvsr65_05[[i]] %>%
str_split(pattern = "\n")
table_data2 <- data.frame(matrix(unlist(table_data2)))
listofdfs[[i]] <- table_data2
}
return(listofdfs)
}
nevlists <- getstats(nvsr65_05)
names(nevlists) <-c(1:48)
for (i in 1:length(nevlists)) {
if(grepl("Taxable Revenue by Area", nevlists$'i'[3,]) == TRUE){
print(i)}}
#Try2
for (i in 1:length(nevlists)) {
if(as.numeric(grepl("Taxable Revenue by Area", nevlists$'i'[3,])) > 0){
print(i)}}
我不是 100% 确定,但我认为这是由于您的索引方式所致 - 尝试:
for (i in names(nevlists)) {
# Get the index as a character instead of numeric
# in case your names are something other than pure numbers as
# in this example
ix = paste(i)
if (grepl("Taxable Revenue by Area", nevlists[[ix]][3, ]) == TRUE) {
print(ix)
}
}
这只会为我打印“48”——这是您所期望的吗?
如果您实际上并不关心列表项的名称,则完全可以忽略列表项的命名,只需执行以下操作:
for (i in 1:length(nevlists)) {
if (grepl("Taxable Revenue by Area", nevlists[[i]][3, ]) == TRUE) {
print(i)
}
}
输出一个数字索引值,这可能更有用,具体取决于您所追求的内容。