rep与replicate

replicate是重复操作,rep是重复值

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化

高级循环

常规方法

# 利用for循环找到每个数不重复因子
# seq_along取位置
prime_factors<-list(one=1,two=2,three=list(3,3))
unique_primes<-vector("list",length(prime_factors))
for(i in seq_along(prime_factors)){
    unique_primes[[i]]<-unique(prime_factors[[i]])
}
names(unique_primes)<-names(prime_factors)
unique_primes

R语言dataframe 列出不重复元素 r语言如何重复100次_for循环_02

高级方法:lapply

lapply(prime_factors,unique)

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_03

高级方法:vapply

#vapply
prime_factors<-list(one=1,two=2,three=list(3,3))
vapply(prime_factors,length,numeric(1))#返回每个元素的长度,每次返回的都是数值型numeric

length,numeric(1)表示返回每个元素的长度,每次返回的都是数值型numeric

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化_04

prime_factors<-list(one=1,two=2,three=c(3,3))
f1<-function(x){
    c(min(x),max(x))
}#返回最大值和最小值
vapply(prime_factors,f1,numeric(2)

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_05

高级方法:sapply

sapply(prime_factors,unique)# 返回list
sapply(prime_factors,length)# 返回vector
sapply(prime_factors,summary)# 返回array

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_06

vapply和sapply的区别:

vapply返回的结果是相同长度的,如果不清楚返回的类型,可以使用sapply,这样可以自动的返回一个类型

sapply(list(),length)#sapply的问题:没有报错空列表,无返回结果

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化_07

str(x)#查看structure

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化_08

dir(pattern="\\.ipynb$")#查看以ipynb结尾的文件
# 加载指定目录下的所有文件
r_fires<-dir(pattern="\\.ipynb$")
lapply(r_files,source)#sourve将所有文件加载进来

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_09

#apply系列函数中,多个参数的传递
complemented<-c(2,3,6,10)
lapply(complemented,rep.int,times=4)#对向量的每一个元素重复4次,返回list

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_10

complemented<-c(2,3,6,10)
sapply(complemented,rep.int,times=4)#对向量的每一个元素重复4次,返回matrix

R语言dataframe 列出不重复元素 r语言如何重复100次_for循环_11

rep4x<-function(x) rep.int(4,times=x)
lapply(complemented,rep4x)

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_12

# 利用匿名函数
lapply(complemented,function(x) rep.int(4,times=x))

R语言dataframe 列出不重复元素 r语言如何重复100次_r语言_13

高级方法:eapply

env<-new.env()
env$molien<-c(1,0,1,0,1,1,2,1,3)
env$larry<-c("rr","kk","ek","el")
eapply(env,length)

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化_14

高级方法:apply

install.packages("matlab")
magic4<-magic(4)
magic4# 横竖相加相同

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_15

rowSums(magic4)#逐行求和

R语言dataframe 列出不重复元素 r语言如何重复100次_for循环_16

apply(magic4,1,sum)#第二个参数是维度,该语句表示对数组的第一个维度,即行,(2是列),求和

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化_17

apply(magic4,1,toString)

R语言dataframe 列出不重复元素 r语言如何重复100次_r语言_18


R语言dataframe 列出不重复元素 r语言如何重复100次_for循环_19

高级方法:mapply

lapply只作用于单个向量参数,不能访问作用元素的名称
mapply可以传入多个向量作为参数

msg<-function(name,factors){
    ifelse(
    length(factors)==1,
    paste(name,"is prime"),
    paste(name,"has factors",toString(factors))
    )
}
mapply(msg,names(prime_factors),prime_factors)

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化_20

R语言dataframe 列出不重复元素 r语言如何重复100次_for循环_21

即使向量化Vectorize()

即使向量化Vectorize()

baby_gender_report<-function(gender){
    switch(
    gender,
    male="is a boy",
    female="is a girl")
}
genders<-c("male","female")
vectorize_baby<-Vectorize(baby_gender_report)#j
vectorize_baby(genders)

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化_22


R语言dataframe 列出不重复元素 r语言如何重复100次_for循环_23

# 分割
with(frogger_scores,split(score,player))#返回的是列表

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_24


返回的是列表

R语言dataframe 列出不重复元素 r语言如何重复100次_开发语言_25

lapply(score_by_player,mean)

R语言dataframe 列出不重复元素 r语言如何重复100次_r语言_26

# 合并
unlist(list_of_means_by_player)

R语言dataframe 列出不重复元素 r语言如何重复100次_开发语言_27

plyr包

https://mirrors.tuna.tsinghua.edu.cn/CRAN/

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_28

R语言dataframe 列出不重复元素 r语言如何重复100次_for循环_29


找到plyr点击进入

R语言dataframe 列出不重复元素 r语言如何重复100次_开发语言_30

install.packages("plyr")
library(plyr)
llply(prime_factors,unique)# 第二个字母l表示return l
str(llply(prime_factors,unique))

R语言dataframe 列出不重复元素 r语言如何重复100次_r语言_31

laply(prime_factors,length)# 第二个字母表示返回向量array
str(laply(prime_factors,length))

R语言dataframe 列出不重复元素 r语言如何重复100次_r语言_32

raply(5,runif(1))#r:rep,a:return array
rlply(5,runif(1))#r:rep,a:return list
rdply(5,runif(1))#r:rep,a:return dataframe
r_ply(5,runif(1))#discarded output

R语言dataframe 列出不重复元素 r语言如何重复100次_开发语言_33

frogger_scores$level<-floor(log(frogger_scores$score))
frogger_scores

R语言dataframe 列出不重复元素 r语言如何重复100次_for循环_34

ddply(frogger_scores,.(player),colwise(mean))#dd表示对数据表做操作,操作为:用player分组,分组取均值

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化_35

ddply(frogger_scores,.(player),summarise,mean_score=mean(score),max_level=max(level))#对数据表做summarise,取出summarize中的max和mean
# mean_score=mean(score),max_level=max(level)是summarize的参数

R语言dataframe 列出不重复元素 r语言如何重复100次_向量化_36

加载包

require
search

R语言dataframe 列出不重复元素 r语言如何重复100次_r语言_37

.libPaths()

R语言dataframe 列出不重复元素 r语言如何重复100次_加载_38