整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

男朋友老是说自己R语言很6,快来用这40道题目检测他

数据文摘作品,转载要求见文末

作者 | NSS

编译 | 张伯楠,刘云南

弋心,卫青,宁云州

R语言是数据科学领域最流行的语言之一。如果你真想从事数据科学事业,那你要么已经会用R语言要么正在学习它。R语言同样是一个拥有广泛的统计和数据科学库的生态系统。为了帮助数据科学家测试他们的R语言能力,我们为DataFest 2017设计了一部分技能测试题。

超过1500人注册了这项考试并有接近500人完成了测试。下图是不同测试者的成绩分布:

下面是关于成绩分布的一些统计数据:

平均分:16.69

分数中值:19

众数:0

下面是这四十道题目的问题和答案,如果错过了测验,你还有机会完成这四十道题目,看看自己在R语言上究竟处于什么水平。

友情提示:在使用本文代码之前,请先清除格式,或查看本文原文网址复制使用。

祝你学习愉快!

问题与答案

1

请看下列函数

f <- function(x) {

g <- function(y) {

y + z

}

z <- 4

x + g(x)

}

1)如果我们执行下列命令(写在下一行),输出结果会是什么?

z <- 10

f(4)

A) 12

B) 7

C) 4

D) 16

答案:(A)

R语言的作用域规则(scoping rule)会使z<-4的条件优先于z<-10。因此,g(x)会返回8,所以A选项是正确答案。

2

鸢尾属植物(iris)数据集包括多种具有不同萼片(sepal)长度的花,如多刚毛类(setosa)、杂色类(versicolor)和维尔吉尼卡(virginica)等。现在,我们想分析所有鸢尾属花的萼片长度分布。其中之一的解决方法是通过下面所示的图可视化它们之间的关系。

下列哪个函数能够用于创建上文所示的图?

A) xyplot()

B) stripplot()

C) barchart()

D) bwplot()

答案:(B)

上文所绘是条型图而选项A、C、D会分别产生散点图、柱状图以及箱线图。因此,B选项是正确答案。

3

Alpha125.50
Beta235.61
Beta212.030
Beta211.300
Alpha265.461

文件名:Dataframe.csv

3)下列命令哪一项可以在一个数据框架中正确读取上述csv文件的全部五行内容?

A) csv(‘Dataframe.csv’)

B) csv(‘Dataframe.csv’,header=TRUE)

C) dataframe(‘Dataframe.csv’)

D) csv2(‘Dataframe.csv’,header=FALSE,sep=’,’)

答案:(D)

第一个和第二选项会将数据第一行读取为变量名。第三个命令不存在,因此,选项D是正确答案。

4

Excel文件格式是最常用的储存数据文件格式之一。了解如何将Excel文件转化为R语言格式非常重要。下面是一个Excel文件,其中数据储存在第三个工作表中。

Alpha125.50
Beta235.61
Beta212.030
Beta211.300
Alpha265.461

文件名:Dataframe.xlsx

下列哪行代码可以从Excel工作表3中读取数据?

A) Openxlsx::read.xlsx(“Dataframe.xlsx”,sheet=3,colNames=FALSE)

B) Xlsx::read.xlsx(“Dataframe.xlsx”,sheetIndex=3,header=FALSE)

C)XLConnect::readWorksheetFromFile(“Dataframe.xlsx”,sheet=3,header=FALSE)

D)All of the above

答案:(D)

上述的全部选项都是正确的,它们采用了不同的方法来将Excel文件读取入R语言,且都正确读取了文件。因此,D选项是正确答案。

5

A10Sam
B20Peter
C30Harry
D!?
E50Mark

文件名:Dataframe.csv

5)上述csv文件中缺失的值被感叹号(“!”)和问号(“?”)所代替。下列哪行代表可以正确将上述csv文件读取进R语言?

A) csv(‘Dataframe.csv’)

B) csv(‘Dataframe.csv’,header=FALSE, sep=’,’,na.strings=c(‘?’))

C) csv2(‘Dataframe.csv’,header=FALSE,sep=’,’,na.strings=c(‘?’,’!’))

D) dataframe(‘Dataframe.csv’)

Solution: (C)

选项A不能在R语言中把“?” 和“!”读取为“NA”;选项B只能把“?”读取为“NA”而“!”不能;选项4并不存在。因此,选项C是正确答案。

6

Column 1Column 2Column 3
Row 115.514.1269.5
Row 218.656.2352.4
Row 321.447.0263.21
Row 436.156.6336.12

文件名:Dataframe.csv

上述csv文件既有行名称又有列名称。下面哪行代码能够正确地将该csv文件读入R语言?

A) delim(‘Train.csv’,header=T,sep=’,’,row.names=TRUE)

B) csv2(‘Train.csv’,header=TRUE, row.names=TRUE)

C) dataframe(‘Train.csv’,header=TRUE,sep=’,’)

D) csv(‘Train.csv’,,header=TRUE,sep=’,’)

答案:(D)

A和B选项中的row.names参数仅仅引用有包含实际行名称的矢量本身或者一个指向包含行名称的列值数字,而并非一个有效的逻辑值。选项C并不存在。因此,D选项是正确答案。

7

Column 1Column 2Column 3
Row 115.514.1269.5
Row 218.656.2352.4
Row 321.447.0263.21
Row 436.156.6336.12

文件名:Dataframe.csv

下列哪行代码将只读取csv文件中的前两行?

A) csv(‘Dataframe.csv’,header=TRUE,row.names=1,sep=’,’,nrows=2

B) csv2(‘Dataframe.csv’,row.names=1,nrows=2)

C) delim2(‘Dataframe.csv’,header=T,row.names=1,sep=’,’,nrows=2)

D) dataframe(‘Dataframe.csv’,header=TRUE,row.names=1,sep=’,’,skip.last=2)

答案:(A)

因为在csv2函数中的默认分隔符是“;”,而csv文件是“,”,B选项将不能正确读取csv文件,选项C使用了错误的参数值,选项D不存在。因此,选项A是正确答案。

8

Dataframe1Feature1Feature2Feature3Feature4A100025.510B200035.534C300045.578D400055.53Dataframe2Feature1Feature2Feature3E500065.5F600075.5G700085.5H800095.5

上图为两个数据框,数据1和数据2。

下列哪行代码可以执行出下述结果?

Feature1Feature2Feature3
A100025.5
B200035.5
C300045.5
D400055.5
E500065.5
F600075.5
G700085.5
H800095.5

A) merge(dataframe[,1:3],dataframe2)

B) merge(dataframe1,dataframe2)[,1:3]

C) merge(dataframe1,dataframe2,all=TRUE)

D) Both 1 and 2

E) All of the above

答案:(D)

C选项会导致融合后的数据框中包含feature 4,而这不是我们想要的结果。因此,D选项是正确答案。

9

V1V2
1121.5461
25161351
34516918
4613112
5112.36230
625.231456
712457

dataframe

R语言中已读取了一个数据集并存储在变量“dataframe”中。下列哪行代码可以实现整个数据集的总结(平均数、中位数、众数)?

A) summary(dataframe)

B) stats(dataframe)

C) summarize(dataframe)

D) summarise(dataframe)

E) None of the above

答案:(E)

A选项只会给出平均值和中位数,而不会给出众数。B,C,D选项同样不能提供所需统计信息。因此,E选项是正确答案。

10

R语言读取了一数据集并存储在变量“dataframe”中。缺失值以NA表示。

A10Sam
BNAPeter
C30Harry
D40NA
E50Mark

dataframe

下列哪行代码将不能给出每一列的缺失值?

A) colSums(is.na(dataframe))

B) apply(is.na(dataframe),2,sum)

C) sapply(dataframe,function(x) sum(is.na(x))

D) table(is.na(dataframe))

答案:(D)

D选项将给出缺失值的总数而非每列单独给出。因此,D选项是正确答案。

11

应用单变量分析检查数据中的缺失值及其分布是数据分析流程中的重要步骤之一。下列是一个数据集,我们希望能为“Value”变量绘制柱状图。

ParameterStateValueDependents
AlphaActive502
BetaActive455
BetaPassive250
AlphaPassive210
AlphaPassive261
BetaActive302
BetaPassive180

dataframe

下列哪个命令能够帮助我们完成任务?

A) hist(dataframed$Value)

B) ggplot2::qplot(dataframed$Value,geom=”Histogram”)

C)ggplot2::ggplot(data=dataframed,aes(dataframe$Value))+geom_histogram()

D) All of the above

答案:(D)

所有给出选项都可以绘制柱状图并可以查看数据的偏度。

12

ParameterStateValueUsage
AlphaActive500
BetaActive451
BetaPassive250
AlphaPassive210
AlphaPassive261
BetaActive301
BetaPassive180

诸如XGBOOST等算法只对数值数据有效。在这种情况下,数据集中的分类变量将先被转化为虚拟变量,其可以展示数据集中某个分类是否存在。比如,当对“Parameter”项数据创建虚拟变量后,数据集显示如下。

Parameter_AlphaParameter_BetaStateValueUsage
10Active500
01Active451
01Passive250
10Passive210
10Passive261
01Active301
01Passive180

下面中的哪个命令能实现这个功能?

A) dummies:: dummy.data.frame(dataframe,names=c(‘Parameter’))

B) dataframe$Parameter_Alpha=0

dataframe$Gende_Beta=0

dataframe$Parameter_Alpha[which(dataframe$Parameter==’Alpha’)]=1

dataframe$Parameter_Beta[which(dataframe$Parameter==’Alpha’)]=0

dataframe$Parameter_Alpha[which(dataframe$Parameter==’Beta’]=0

dataframe$Parameter_Beta[which(dataframe$Parameter==’Beta’]=1

C) contrasts(dataframe$Parameter)

D)A和B

答案:D

C选项会将Parameter列的值变成两种类型但不会进行独热编码(one hot encoding)。因此,选项D是正确选择。

13

Column1Column2Column3Column4Column5Column6
Name1Alpha1224540Alpha
Name2Beta1632511Beta
Name3Alpha52104320Gamma
Name4Beta3672841Delta
Name5Beta4590320Phi
Name6Alpha1224120Zeta
Name7Beta3264641Sigma
Name8Alpha4284540Mu
Name9Alpha56112311Eta

以上为名为dataframe的变量。

我们想计算数据表中第二列和第三列之间的相关性,下面代码中的哪个能实现这个目的?

A) corr(dataframe$column2,dataframe$column3)

B) (cov(dataframe$column2,dataframe$column3))/(var(dataframe$column2)*sd(dataframe$column3))

C)

(sum(dataframe$Column2*dataframe$Column3)- (sum(dataframe$Column2)*sum(dataframe$Column3)/nrow(dataframe)))/(sqrt((sum(dataframe$Column2*dataframe$Column2)-(sum(dataframe$Column2)^3)/nrow(dataframe))* (sum(dataframe$Column3*dataframe$Column3)-(sum(dataframe$Column3)^2)/nrow(dataframe))))

D)以上都不是

答案:(D)

在选项A中,corr是错误的函数写法。实际的计算相关性的函数写法是:cor。在选项B中,分母应该是标准差而不是方差。相似地,选项C中的公式是错误的。因此,选项D是正确选择。

14

ParameterStateValueDependents
AlphaActive502
BetaActive455
BetaPassive250
AlphaPassive210
AlphaPassive261
BetaActive302
BetaPassive180

以上为名为dataframe的变量。

上述数据集已经加载进了你的R运行空间中,变量名为“dataframe”,第一行代表列名称。以下哪个代码将仅选择参数为Alpha的行?

A) subset(dataframe, Parameter=’Alpha’)

B) subset(dataframe, Parameter==’Alpha’)

C) filter(dataframe,Parameter==’Alpha’)

D) B和C

E) 上面全部

答案:(D)

A选项中,应该用等值运算符取代赋值运算符,因此选项D正确。

15

以下哪个函数用于以电子表格格式观察数据集?

A) disp()

B) View()

C) seq()

D) 以上全部

答案:(B)

选项B是采用电子表格形式查看数据集的唯一选项。因此选项B是正确答案。

16

下面的数据表存储在一个名字为“data”的变量中。

AB
1Right
2Wrong
3Wrong
4Right
5Right
6Wrong
7Wrong
8Right

data

设定B是一个分类变量,我们需要为每一个分类级别画一个箱线图。以下哪一个命令能帮助我们实现这个功能?

A) boxplot(A,B,data=data)

B) boxplot(A~B,data=data)

C) boxplot(A|B,data=data)

D) 以上都不是

答案(B)

R中画箱线图的函数要求公式中要有分类因素,通过这些分类因素绘制不同的箱线图。因此选项B是正确的答案。

17

下面命令中的哪一个能把绘图窗口分成4×3的窗口?同时绘图逐列输入窗口。

A) par(split=c(4,3))

B) par(mfcol=c(4,3))

C) par(mfrow=c(4,3))

D) par(col=c(4,3))

答案:(B)

mfcol命令参数能保证图像逐列输入绘图窗口。因此,选项B是正确答案。

18

一个数据表变量 “df” 具有如下数据:

Dates

2017-02-28

2017-02-27

2017-02-26

2017-02-25

2017-02-24

2017-02-23

2017-02-22

2017-02-21

我们希望把它读取成如下格式:

28 Tuesday Feb 17

27 Monday Feb 17

26 Sunday Feb 17

25 Saturday Feb 17

24 Friday Feb 17

23 Thursday Feb 17

22 Wednesday Feb 17

21 Tuesday Feb 17

下面命令中的哪些(个)能产生期望的输出?

A) format(df,”%d %A %b %y”)

B) format(df,”%D %A %b %y”)

C) format(df,”%D %a %B %Y”)

D) 以上都不是

答案: (D)

以上的选项都不能产生期望的输出。因此选项D是正确答案。

19

下列哪个命令能将数据表“table”的第二列名称由alpha改成beta

A) colnames(table)[2]=’beta’

B) colnames(table)[which(colnames==’alpha’)]=’beta’

C) setnames(table,’alpha’,’beta’)

D) 以上所有

答案: (D)

上面的选项都是重命名数据表中列名称的不同方法,因此,选项D是正确答案。

20

R运行中的大部分工作都使用系统内存,如果同时采用大的数据集,当R的工作空间不能保证所有的R对象都保持在内存中时问题就出现了。在这样的情况下,移除无用的对象是一种解决方法。

下面命令中的哪个或哪些可以从工作空间中移除R对象或变量“santa”?

A) remove(santa)

B) rm(santa)

C) 上面全部

D) 都不是

答案 : (C)

remove 和 rm,都能用于清理工作空间。因此选项C是正确答案。

21

“dplyr”是R中最流行的工具包之一,它包括5个核心数据处理函数。下面选项中的哪一个不是dplyr中的核心函数?

A) select()

B) filter()

C) arrange()

D) summary()

答案: (D)

summary 是R语言基础工具包中的函数而不是dplyr中的函数。

22

在特征选择过程(feature selection)中使用下面的数据表(名称为table),列1和列2已经证明影响不显著。因此我们不会把这两个特性加入到我们的预测模型中。

Column1Column2Column3Column4Column5Column6
Name1Alpha1224540Alpha
Name2Beta1632511Beta
Name3Alpha52104320Gamma
Name4Beta3672841Delta
Name5Beta4590320Phi
Name6Alpha1224120Zeta
Name7Beta3264641Sigma
Name8Alpha4284540Mu
Name9Alpha56112311Eta

table

下面命令中的哪些(个)能选择“table”中列3到列6中的所有行?

A) dplyr::select(table,Column3:Column6)

B) table[,3:6]

C) subset(table,select=c(‘Column3’,’Column4’,’Column5’,’Column6’))

D) 以上全部

答案: (D)

选项A、B和C都是不同的选取列的方法,所以选项D是正确答案。

23

Column1Column2Column3Column4Column5Column6
Name1Alpha1224540Alpha
Name2Beta1632511Beta
Name3Alpha52104320Gamma
Name4Beta3672841Delta
Name5Beta4590320Phi
Name6Alpha1224120Zeta
Name7Beta3264641Sigma
Name8Alpha4284540Mu
Name9Alpha56112311Eta

以上为变量名为table的数据表。

下面哪个(些)命令会选取列1中带有“alpha”值的行,同时选取列4中数值小于50的项?这个数据表存储在名为“table”的变量中。

A) dplyr::filter(table,Column1==’Alpha’, Column4<50)

B) dplyr::filter(table,Column1==’Alpha’ & Column4<50)

C) 以上全部

D) 以上都不是

答案: (A)

dplyr中的filter函数使用“,”来添加条件,而不是“&”。因此,选项A是正确答案。

24

Column1Column2Column3Column4Column5Column6
Name1Alpha1224540Alpha
Name2Beta1632511Beta
Name3Alpha52104320Gamma
Name4Beta3672841Delta
Name5Beta4590320Phi
Name6Alpha1224120Zeta
Name7Beta3264641Sigma
Name8Alpha4284540Mu
Name9Alpha56112311Eta

以上为变量名为table的数据表。

下面代码中的哪些(个)能把数据表基于列2进行升序排列,同时对列3进行降序排列?

A) dplyr::arrange(table,desc(Column3),Column2)

B) table[order(-Column3,Column2),]

C) 以上全部

D) 以上都不是

答案: (C)

order和arrange函数都能用于在R中对列进行分类。因此选项C是正确答案。

25

处理字符串数据(string)是文本分析的一个重要组成部分,当创建参数符号或其它符号时,分割字符串经常是一项常用任务。下面命令行的输出是什么?

A<-paste("alpha","beta","gamma",sep=" " )

B<-paste("phi","theta","zeta",sep="")

parts<-strsplit(c(A,B),split=” ”)

parts[[1]][2]

A) alpha

B) beta

C) gamma

D) phi

E) theta

F) zeta

答案 : (B)

c(A.B) 将合并 A=”alpha beta gamma” 和 B=”phithetazeta” 并将其通过空格隔开。使用strsplit之后,之前合成的字符串会再次将A,B用空格隔开,分别生成两个list 。parts[[1]][2]命令旨在显示第一个list中的第二个元素,是“beta”。因此选项B是正确答案。

26

以下命令的输出是什么?

grepl(“neeraj”,c(“dheeraj”,”Neeraj”,”neeraj”,”is”,”NEERAJ”))

A) [FALSE TRUE TRUE FALSE TRUE]

B) [FALSE TRUE TRUE FALSE FALSE]

C) [FALSE FALSE TRUE FALSE FALSE]

D) None of the above

答案:(C)

上述命令将检测集合中的元素是否与前面的“neeraj”完全匹配,因此选项C是正确答案。

27

作为从事文本数据工作的数据科学家,我们有时会遇到这样一些情况,即发现某个不需要的单词多次出现。以下就是一个此类的字符串。

A<-c("I can use because thrice in a sentence because because is a special word.")

A) gsub(“because”,”since”,A)

B) sub(“because”,”since”,A)

C) regexec(“because”,”since”,A)

D) None of the above

答案:(A)

sub命令仅替换字符串中第一次出现的单词,而regexec将返回匹配的位置列表,如果没有匹配则返回-1。因此,选项A是正确答案。

28

28)想象一个通过以下代码创建的数据框。

以下哪个命令能够在这两列上帮助我们删除重复行?

A) df[!duplicated(df),]

B) unique(df)

C) dplyr::distinct(df)

D) All of the above

答案:(D)

上述所有答案都是基于这两列删除重复行的不同方法。因此,选项D是正确答案。

29

分组(grouping)是数据分析中的一项重要活动,它可以帮助我们发现一些有趣的趋势,这些趋势在原始数据中可能并不易被发现。

假设你有一个由以下代码行创建的数据集。

table<-data.table(foo=c("A","B","A","A","B","A"),bar=1:6)

以下哪个命令能帮我们计算出由foo变量分组的bar变量的平均值?

A) aggregate(bar~foo,table,mean)

B) table::df[,mean(bar),by=foo]

C) dplyr::table%>%group_by(foo)%>%summarize(mean=mean(bar))

D) All of the above

答案:(D)

所有上述方法都可用于计算列的分组统计值。因此,选项D是正确答案。

30

如果我有两组矢量x < - c(1,3,5)和y <-c(3,2),那么,cbind(x,y)将产生什么?

A)一个两列三行的矩阵

B)一个三列两行的矩阵

C)一个两列三行的数据框

D)一个三列两行的数据框

答案:(D)

上述所有选项定义的都是杂乱数据,因此选项D是正确答案。

31

下列哪一命令可以把以下名为maverick的数据框转换为下方显示的数据框?

输入数据 ——“maverick”

GradeMaleFemale
A1015
B2015
A3035

输出数据

GradeSexCount
AMale10
AFemale15
BMale30
BFemale15
AMale30
AFemale35

A) tidyr::Gather(maverick, Sex,Count,-Grade)

B) tidyr::spread(maverick, Sex,Count,-Grade)

C) tidyr::collect(maverick, Sex,Count,-Grade)

D) None of the above

答案:(A)

Spread命令是将行转换为列,而在tidyr包或基础包中没有collect这一命令。因此,选项A是正确答案。

32

下列哪一命令能帮助我们将下列矢量所有Delhi换成Delhi_NCR ?

C<-c(“Delhi is”,”a great city.”,”Delhi is also”,”the capital of India.”)

A) gsub(“Delhi”,”Delhi_NCR”,C)

B) sub(“Delhi”,”Delhi_NCR”,C)

C) Both of the above

D) None of the above

答案:(C)

虽然sub命令仅能替换第一次出现的模式,但在本情境下,字符串中只出现了一个Delhi。因此,在这种情况下,gsub和sub命令都有效。所以,选项C是正确答案。

33

创建一个表示另一变量是否有缺失值的特征数据,有时对于预测模型来说非常有用。

下方数据框中的某一列有缺失值。

Feature1Feature2
BNA
C30
D40
E50

以下哪个命令将创建一个名为“missing”、值为1的列,其中变量“Feature2”具有缺失值?

Feature1Feature2Missing
BNA1
C300
D400
E500

A)

dataframe$missing<-0

dataframe$Missing[is.na(dataframe$Feature2)]<-1

B)

dataframe$missing<-0

dataframe$Missing[which(is.na(dataframe$Feature2))]<-1

C) Both of the above

D) None of the above

答案:(C)

选项C是正确答案。

34

假设有2个数据框“A”和“B”。A有34行,B有46行。运行以下命令后,所得数据框的行数是多少?

merge(A,B,all.x=TRUE)

A) 46

B) 12

C) 34

D) 80

答案:(C)

all.x表示以A为基础进行合并,因此合并后的数据框将包含与A相同的行数。所以,选项C是正确答案。

35

加载数据集后,数据科学家通常做的第一件事就是明确数据集所包含的行数和列数。更专业地讲,这是了解数据集的维度。这样做是为了明确正在处理的数据规模,然后选择正确的技术和工具。

以下哪个命令不能帮我们查看数据集的维度?

A) dim()

B) str()

C) View()

D) None of the above

答案:(C)

View命令能够以类似电子表格的格式将数据集打印到控制台,但不能帮助我们查看数据集维度。因此,选项C是正确答案。

36

有时候,我们会遇到这样的情况,即一个数据集包含两列,而我们希望知道其中一列的哪些元素不存在于另一列中。这在R中使用setdiff命令很容易实现。

Column1Column2Column3Column4Column5Column6
Name1Alpha1224540Zion
Name2Beta1632511Beta
Name3Alpha52104320Gamma
Name4Beta3672841Delta
Name5Beta4590320Phi
Name6Alpha1224120Zeta
Name7Beta3264641Sigma
Name8Alpha4284540Mu
Name9Alpha56112311Eta

Dataframe

以下命令的输出是什么?

setdiff(dataframe$Column1,dataframe$Column6)==setdiff(dataframe$Column6,dataframe$Column1)

A) TRUE

B) FALSE

C) Can’t Say

答案:(B)

参数的顺序在setdiff函数中很重要。因此,选项B是正确答案。

37

下列数据集存储在一个名为“frame”的变量中。

AB
alpha100
beta120
gamma80
delta110

以下哪个命令可以为上述数据集创建条形图。使用B列中的值来表示条形图的高度。

A) ggplot(frame,aes(A,B))+geom_bar(stat=”identity”)

B) ggplot(frame,aes(A,B))+geom_bar(stat=”bin”)

C) ggplot(frame,aes(A,B))+geom_bar()

D) None of the above

答案:(A)

stat =“identity”将确保B列中的值成为条形图的高度。因此,选项A是正确答案。

38

Ampgcyldisphpdratwtqsecvsamgearcarb
Mazda RX421.061601103.902.62016.460144
Mazda RX4 Wag21.061601103.902.87517.020144
Datsun 71022.84108933.852.32018.611141
Hornet Drive21.462581103.083.21519.441031
Hornet Sportabout18.783601753.153.44017.020032
Valiant18.162251052.763.46020.221031

我们希望为cyl变量创建一个堆叠条形图,堆叠标准为“要素vs数量”。以下哪个命令将帮助我们执行此操作?

A)qplot(factor(cyl),data=mtcars,geom=”bar”,fill=factor(vs)

B) ggplot(mtcars,aes(factor(cyl),fill=factor(vs)))+geom_bar()

C) All of the above

D) None of the above

答案:(C)

选项A和B都将创建一个由“fill”参数引导的堆叠条形图。因此,选项C是正确答案。

39

39)命令paste(1:3,c(“x”,“y”,“z”),sep =“”)的输出是什么?

A) [1 2 3x y z]

B) [1:3x y z]

C) [1x 2y 3z]

D) None of the above

答案:(C)

40

R语言拥有丰富的资源,可以用来绘制非常高端的图表,很多时候你想保存图表以便向他人展示。那么,将你的图表保存为PDF文件便是这一种选择。

如果要将图表保存为PDF文件,下列哪项做法正确?

A) Construct the plot on the screen device and then copy it to a PDF file with dev.copy2pdf().

B) Construct the plot on the PNG device with png(), then copy it to a PDF with dev.copy2pdf().

C) Open the PostScript device with postscript(), construct the plot, then close the device with dev.off().

D) Open the screen device with quartz(), construct the plot, and then close the device with dev.off().

答案:(A)

首先在屏幕设备上创建图表,然后可以轻松地复制到pdf文件中。因此,选项A是正确答案。

结语

用以上的四十道题来检验自己R语言的编程能力吧!祝大家编程愉快,早日脱单!

原文链接:https://www.analyticsvidhya.com/blog/2017/05/40-questions-r-for-data-science/

者:极客小俊
一个把逻辑思维转变为代码的技术博主


引言

我们平常在项目开发当中, 利用调试工具来调试CSS相关的代码, 它可以帮助我们了解哪些CSS 功能被使用,CSS代码效率,以及CSS代码的执行情况,而这些都是 CSS 代码检查与调试的核心, 它在某种情况下,会影响我们整个网站应用程序的整体性能, 所以掌握必要的调试技巧是很有必要的!

使用Chrome DevTools 调试CSS代码

我们平常可以使用chrome浏览器自带的Chrome DevTools调试工具 来检查与调试CSS代码!

基础手工调试 CSS 代码

快速手动查看元素的CSS样式

可以在chrome浏览器打开页面中按下快捷键F12 打开chrome开发调试工具,然后使用箭头工具Element选项中直接选择html代码 , 最后在右侧的Style中就可以看到当前这个元素颜色、字体、大小CSS相关信息

如图:

快速查看css link外部样式表

概念

在我们选择好元素节点之后, 右侧的 Styles 选项卡中,出现的当前元素的 CSS属性, 旁边的链接文件可以直接点击打开定义CSS规则外部样式表 可以查看样式的源文件

快速给选择的元素添加 行间样式

概念

这种方法相当于向html标签style 属性一样的原理!

当我们在Element选项中直接选择html代码中的一个元素之后 , 在右侧的Style中, 点击 element.style 就可以给当前选择的这个元素增加行间CSS样式了!

这个方法在实际应用开发当中很实用, 根据添加的行间css属性我们就很容易快速判断并且检测出元素的CSS属性的问题出在什么地方!

如图

快速向元素已有样式规则中添加、修改CSS属性

概念

平常在开发当中 也会用到这个小技巧, 来快速检测自己写的CSS是否有误!

添加CSS声明

当我们在Element选项中直接选择html代码中的一个元素之后 , 在右侧的Style中单击要添加声明的样式规则{}大括号中间部分, 就可以出现光标,输入CSS属性名,最后输出完成后 按 enter 键即可!

修改CSS声明

我们只需要在原有样式上双击鼠标,修改样式规则,并按 Enter 键就可以了!

如图

快速给元素添加class类

概念

当我们在Element选项中直接选择html代码中的一个元素之后 , 在右侧的Style选项卡中有一个 .cls 的按钮,点击这个按钮会显示一个 Add new class 的输入框,输入想要添加的class类名之后按 enter 键就可以了

这样就可以直接点击 添加好的class类 复选框可以来回切换样式 进行CSS属性的测试

小提示: 前提是你最好是把要添加的class 先写好!

快速更改元素的CSS属性值快捷键

我们在Element选项右侧的Style选项卡中编辑CSS属性值的时候,可以使用键盘上的快捷键将值递增/递减的操作

  • 方向键Up 则是每点击一次给CSS属性值增加1
  • 方向键Down 则是每点击一次给CSS属性值减少1
  • Alt+ 方向键Up 支持(windows,Linux)则是每点击一次给CSS属性值增加0.1
  • Alt+ 方向键Down 支持(windows,Linux)则是每点击一次给CSS属性值减少0.1
  • Shift + 方向键Up 则是每点击一次给CSS属性值增加10
  • Shift + 方向键Down 则是每点击一次给CSS属性值减少10
  • ctrl + Shift + Page Up 支持(windows,Linux)则是每点击一次给CSS属性值增加100
  • ctrl + Shift + Page Down支持(windows,Linux)则是每点击一次给CSS属性值减少100

拾色器的使用

概念

一般可以使用拾色器来快速修改元素的颜色

Style选项卡中,选中目标html元素后 将鼠标悬停在目标元素颜色属性小图标上点击一下,就可以出现拾色器了 , 如果你很会搭配颜色这个小工具还是挺有用的!

如图


CSS Overview (当前页面CSS信息提取)

这个功能还是非常强大的! 但是chrome开发调试工具 默认是没有开启的, 所以需要我们手动去开启

如何在chrome开发调试工具中开启CSS Overview功能

步骤

打开chrome浏览器---->F12进入调试工具----->点击调试工具右上方的小齿轮setting图标进入设置---

---->选择Experiments----->勾选CSS Overview 选项即可!

如图

注意: 开启之后要重新开启一下调试工具!

CSS Overview的作用

这个功能可以给开发者展示出当前页面 CSS 属性的所有信息,比如颜色、字体、对比度问题、未使用的声明和media查询, 通常用这个工具来判断当前CSS 代码的质量

CSS Overview功能包含五个信息板块

1.Overview summary

重点可以显示出一些当前页面中的CSS的使用情况!

2.Colors

可以显示出当前页面中使用到的所有颜色信息 包括 背景、 字体、 等等...

3.Font info

在这里可以显示出当前页面中 所使用到的字体以及字体css属性相关的所有信息!

也就是可以在这里看到每一种使用到的字体所设置的css字体相关属性

4.Media queries

在这里可以查看到当前页面中使用到的媒体查询相关信息

Coverage panel (检测信息覆盖度)

这个功能主要是可以用来检测CSSJS 文件的代码数量以及使用评率, 也就是说它可以提示项目应用中加载的每个文件使用多少CSS

打开步骤

打开chrome浏览器---->F12进入调试工具----> Ctrl + shift + P 快捷键,输入Coverage,然后再选择: Show Coverage,最后点击刷新的小图标 就可以了!

小提示 可以在 URL Filter输入框中过滤出 .css文件, 只要输入.css 就可以专门显示 CSS文件了

如图

这些数据看似不重要,但可能有些时候可以帮助你 建立优化思维以及策略!


Rendering Panel (渲染面板)

听名字就知道它的作用是跟CSS效果渲染有关系的, 平常使用它 来检测代码的渲染时间以及渲染过载的区域!

关于css渲染涉及到浏览器构成,这里就不过多提及,以后我会出一篇详细做讲解!

Rendering Panel (渲染面板) 打开步骤

打开chrome浏览器---->F12进入调试工具----> Ctrl + shift + P 快捷键----->输入Rendering---->然后选择 Show Rendering项, 然后回出现很多复选框功能

平常我会用到的选项如下表:

复选项

描述

Paint flashing

当页面上有重绘效果的地方,会显示绿色矩形的区域进行标注! 可以简单理解为有动态效果的页面区域, 这些效果区域 往往浏览器渲染时间一些!

Frame Rendering Stats

这个选项勾选上之后可以显示GPU的一些实时情况, 用来判定一些效果动画是否卡顿还是比较有用的!



如图



渲染面板中我们可以获取到 一些常规检查中没有的数据信息, 这些信息对于了解 CSS 代码 或者是 JS代码的性能以及消耗设备的资源等 都提供了很多依据和参照, 在深度优化的时候或许能给你带来一丝启发!

Performance Monitor (性能监视器)

故名意思就是用来查看代码运行的性能监视界面,

打开步骤

打开chrome浏览器---->F12进入调试工具----> Ctrl + shift + P 快捷键----->输入Performance Monitor---->最后选择 Show Performance Monitor 项 即可打开,

在这个面板当中可以勾选一些选项如下

CPU usage

当前CPU的使用率,也就是CPU占用率

JS heap size

指的是JS对象堆的占用的内存大小

DOM nodes

内存中DOM节点个数,这个会随着页面的效果变化而增加或减少

JS event listeners

JS事件侦听器个数

如图

Layouts/sec

在用户查看页面的过程当中,页面中的布局元素重排

Style recalcs / sec

页面中的样式重绘

以上两个选项通常也是用于检测与分析我们的CSS代码性能, 例如我们在CSS中使用了left或top属性那么就会产生一些布局上的重绘, 那么如果将这些属性加载到JS动画中,则可能每秒都触发几十甚至是上百次重绘操作

处于性能优化考虑 , 我们如果使用了CSS3中的transform属性中的translateX/Y来做动画效果 ,那么会发现它并不会触发重绘的流程,而只是组合画面 而这些都是基于显卡GPU, 而CPU 的使用率会大大降低!

所以我们平常在开发JS效果的过程当中使用 translate()来移动元素,而不用 top或left来移动元素的根本原因!

我们可以来看一下对比图:

小结: 所以通过 Layouts/secStyle recalcs/sec 两个选项展示了在页面中触发重绘布局CSS相关信息

以上这些在平常前端开发当中可以帮助你获取一些实时应用程序的性能数据,在判断性能优劣的时候也是非常有帮助的!

Performance Panel (性能面板)

Performance Panel跟之前的Performance Monitor的区别就是 我们先通过 Performance Monitor性能监视器来把控每一个环节的性能, 然后再使用Performance Panel进行整体的性能分析!

打开步骤

打开chrome浏览器---->F12进入调试工具----> Ctrl + shift + P 快捷键----->输入Performance---->然后我们选择 Show Performance项, 最后点击重新加载的图标,或者按下快捷键 ctrl + shift + e

并且我们也可以反复按下快捷键(ctrl + shift + e)重新加载绘制页面性能信息, 在最下面的饼图中显示了绘制页面渲染页面的总体时间!

如图

从上图中就可以看到 当我们打开性能面板加载之后就可以获取到 加载页面的时间/毫秒、 CSS、JS、DOM节点、事件监听等所需要的渲染总体时间!

国外在线CSS调试检测代码工具

1.CSS Specificity Visualizer

概述

Specificity Visualizer个人觉得是一款国外非常不错的在线css检测工具

在线地址: https://isellsoap.github.io/specificity-visualizer/

如图

我们只需要打开访问地址后 粘贴你想要检测CSS代码, 然后点击Visualize it按钮进行检测, 然后回在下面显示出特殊样式选择器 以及选择器的权重等相关信息

操作图

标记为红色的地方说明这些选择器还可以优化得更好!

2.CSS Specificity Graph Generator

概述

这款国外在线的CSS检测工具 可以帮助你检测 CSS代码中的 选择器是如何按特定样式组织

在线地址: https://jonassebastianohlsson.com/specificity-graph/

如图

它会提示波峰值高那么是不好的, 总的趋势应该是在样式表的后面有更高的特异性

如下图

END

以上就是平常我在工作与学习当中会使用到的一些CSS代码检测调试工具, 希望能给你带来一点帮助!

感谢你的阅读!




"点赞" "评论" "收藏"

大家的支持就是我坚持创作下去的动力!


​如果以上内容有任何错误或者不准确的地方,欢迎在下面 留个言指出、或者你有更好的想法,欢迎一起交流学习​

月1日,湖北省教育考试院发布暖心高考提示之二,除了安检和疫情防控提醒外,用了不少篇幅提醒考生规范答题。

高考评卷采取计算机网上评卷方式进行,考生答题时所有答案都必须书写在答题卡指定的区域上。高考答题卡总体上分为三个部分:考生信息、答题区域和题号、图像定位点。根据近几年答题卡扫描和高考评卷反馈的情况,考生作答的答题卡存在的主要问题有:

1、卡首部分填写、粘贴有误。如:准考证号填写错误;条形码粘贴不规范,将条形码撕破或弄皱,造成扫描困难。

2、选择题填涂不规范。主要包括:①填涂过轻,没有涂黑、涂满。②填涂标记不规范,在选项中涂“点线”“横线”或打“√”。③填错后修改时没有擦干净。④使用的2B铅笔不符合要求,甚至用签字笔填涂,达不到扫描要求。

3、非选择题答题不规范。主要包括:①使用铅笔等非规定用笔作答;②笔细、墨淡或书写较轻,图像不清;③超出答题区域答题;④答题错位,未在对应的题号下作答;⑤在规定的答题区域内,故意空出一定答题区域不答题。如在语文科目作文答题区域,将第1页空出,从第2页开始作答;⑥作文忘记写题目;⑦答题卡上有记号、污损等。

考试院提醒考生答题一定要注意作答规范,并例举了各类题型规范答题示例(详见省教育考试院官网http://www.hbea.edu.cn/html/2022-06/12915.html )

据了解,今年高考根据省新冠肺炎疫情防控指挥部的要求,考生应于6月5日参加全省统一安排的免费核酸检测,6月6日下午5点钟前将本人健康码、行程卡、考前48小时核酸检测阴性证明交高中学校或考点学校查验,查验符合健康要求的将在准考证上加盖“已查验”章。

考试期间,请考生提前到达考点。考生凭身份证、加盖“已查验”章的准考证,经身份验证、体温测量后分散有序进入。对未提供核酸检测证明但健康码、行程卡和体温均正常者,要在考点进行抗原或核酸快速检测。对抗原检测阴性但核酸检测结果未出的,只能在备用隔离考场参加考试。体温异常的考生,可先在临时留观区休息后进行复测,复测仍然异常的,经医疗卫生专业人员评估后,具备条件的,由专人引导,前往备用隔离考场参加考试。

(来源:湖北日报)

【编辑:侯方隅】

【来源:湖北日报】