将lappy与as.data.frame一起使用

将lappy与as.data.frame一起使用,r,lapply,R,Lapply,df是一个从html转换而来的表列表,存储为要转换为数据帧的列表 as.data.frame(df[1]) 没问题。然而,两者 df_2 <- lapply(df, as.data.frame) 使用可复制的示例进行编辑: a <- tribble( + ~ x, ~ y, + 1, 2 + ) > b <- tribble( + ~ x, ~ y, + 3, 4 + ) > a_list <- as.list(a) > b_list <-

df是一个从html转换而来的表列表,存储为要转换为数据帧的列表

as.data.frame(df[1]) 
没问题。然而,两者

df_2 <- lapply(df, as.data.frame)
使用可复制的示例进行编辑:

a <- tribble(
+ ~ x, ~ y,
+ 1, 2
+ )
> b <- tribble(
+ ~ x, ~ y,
+ 3, 4
+ )
> a_list <- as.list(a)
> b_list <- as.list(b)
master_list <- list(a_list, b_list)
a_df <- as.data.frame(master_list[1])

> class(a_df)
[1] "data.frame"
master_df <- lapply(master_list, as.data.frame)
> class(master_df[1])
[1] "list"
class(master_df[[1]])
[1] "data.frame"
实际上,需要[[]]来过滤掉容器。。。但是,这仍然不能解决在我的原始示例中执行此操作的全部原因,即调用从每个表中移除空行的函数:

> clear_empty <- master_df[!apply(master_df == "", 1, all), ]
Error in apply(master_df == "", 1, all) : 
  dim(X) must have a positive length

也许我必须找到另一个函数来执行此操作,尽管我喜欢上面的函数的简单性。

您可以使用此解决方案:

a <- tribble(
   ~ x, ~ y,
   1, 2,
   1,1,
   '','',
   1,''
   )
b <- tribble(
   ~ x, ~ y,
   3, 4,
   '',2,
   4,''
   )
a_list <- as.list(a)
b_list <- as.list(b)
master_list <- list(a_list, b_list)
nes_list <- lapply(master_list,function(x) { 
  x <- as.tibble(x)
  x[x == ''] <- NA
  # removing rows that have all NA
  # x[rowSums(is.na(x)) != ncol(x),]
  # remove rows that have at least one NA
  # x[complete.cases(x),]
})

你能给出一个可重复的例子吗?Lappy也返回一个列表。在没有看到示例的情况下很难判断,但是您可以尝试使用[[而不是[.[]提取元素,而在本例中,[提取元素和容器可能是list@MikeH.“事实上,我已经忘记了这一点。”约翰·科勒曼·奥克补充道,谢谢。
> clear_empty <- master_df[!apply(master_df == "", 1, all), ]
Error in apply(master_df == "", 1, all) : 
  dim(X) must have a positive length
a <- tribble(
   ~ x, ~ y,
   1, 2,
   1,1,
   '','',
   1,''
   )
b <- tribble(
   ~ x, ~ y,
   3, 4,
   '',2,
   4,''
   )
a_list <- as.list(a)
b_list <- as.list(b)
master_list <- list(a_list, b_list)
nes_list <- lapply(master_list,function(x) { 
  x <- as.tibble(x)
  x[x == ''] <- NA
  # removing rows that have all NA
  # x[rowSums(is.na(x)) != ncol(x),]
  # remove rows that have at least one NA
  # x[complete.cases(x),]
})