将函数重命名到R上的列表时出错

时间:2019-01-11 00:00:39

标签: r dplyr

我的数据:

library(tidyverse)

1:6%>%
  str_c('var',.)%>%
  map(~assign(.,runif(30,20,100),envir=globalenv()))
tibble<-as_tibble(
  bind_cols(mget(ls(pattern='*v')))
)
cluster<-kmeans(tibble,centers=3)
cluster
tibble$kmeans<-as.factor(cluster[['cluster']])
head(tibble)

应用此功能时,结果没问题:

names(tibble)[str_which(names(tibble),regex('KMEaNS',ignore_case=TRUE))]<-'variable'

variable是新名称。

对于list,此功能不起作用:

mylist<-list(dataset1=c(a=1,kmeans=2,c=3),
         dataset2=c(a=4,kmeans=5,c=6),
         dataset2=c(r=7,kmeans=8,p=9))

第一个功能:

mylist%>%
  lapply(function(x){
    lapply(x,names(x)[str_which(names(x),regex('KMEa',ignore_case=T))])<- 'variable'
})
  

lapply(x,names(x)[str_which(names(x),regex(“ KMEa”,ignore_case = T))])错误)<-“ variable”:找不到函数“ lapply <-” < / p>

第二功能:

mylist%>%
  map(.,~names(.)[str_which(names(.),regex('KM',ignore_case=T))])<-'variable'
  

mylist中的错误%>%map(。,〜names(。)[str_which(names(。),regex(“ KM”,ignore_case = T))])<-“变量”:找不到函数“ %>%<-“

两个问题

  • 这些功能有什么问题?

  • dplyr::rename有解决方案吗?

2 个答案:

答案 0 :(得分:1)

mylist中的元素是数字矢量,而要使rename_at工作,我们需要一个小对象。因此,首先我们需要将该数字矢量转换为小对象,然后可以同时使用maprename_at

library(tidyverse)

mylist[] <- lapply(mylist, function(x) as.tibble(t(x)))
map(mylist, ~ rename_at(., vars(contains('kmeans')), ~ 'variable'))


#$dataset1
# A tibble: 1 x 3
#      a variable     c
#  <dbl>    <dbl> <dbl>
#1     1        2     3

#$dataset2
# A tibble: 1 x 3
#      a variable     c
#  <dbl>    <dbl> <dbl>
#1     4        5     6

#$dataset2
# A tibble: 1 x 3
#      r variable     p
#  <dbl>    <dbl> <dbl>
#1     7        8     9

答案 1 :(得分:1)

在函数中,您应该在重命名后返回x以得到所需的结果-

mylist<-list(dataset1=c(a=1,kmeans=2,c=3),
             dataset2=c(a=4,kmeans=5,c=6),
             dataset2=c(r=7,kmeans=8,p=9))

fn <- function(x) {names(x)[str_which(names(x),regex('KMEa',ignore_case=T))] <- 'variable'
                  return(x)}
lapply(mylist,fn) 

mylist %>% lapply( function(x) {names(x)[str_which(names(x),regex('KMEa',ignore_case=T))] <- 'variable'
return(x)})