R使用条件添加到循环中的列表

时间:2016-07-15 00:08:57

标签: r

我有一个data.frame dim =(200,500)

我想在数据框的每一列上执行onplaying="this.controls=false"并附加到列表中。这就是我正在尝试的:

shaprio.test

然而这是失败的。一些指针? (背景主要是python,R用户不多)

2 个答案:

答案 0 :(得分:2)

考虑lapply(),因为传入它的任何数据帧都会对列运行操作,返回的列表将等于列数:

colstoremove <- lapply(I.df.noconv, function(col) shapiro.test(col)[2])

答案 1 :(得分:1)

以下是

中发生的事情
for (i in range(dim(I.df.nocov)[2]))

为了举例,我假设I.df.nocov包含100行和5列。

dim(I.df.nocov)I.df.nocov维度的向量,即c(100,5)

dim(I.df.nocov)[2]I.df.nocov的第二维,即5

range(x)是一个2元素向量,包含x的最小值和最大值。例如,范围(c(4,10,1))是c(1,10)。所以range(dim(I.df.nocov)[2])是c(5,5)。

因此,循环迭代两次:第一次i = 5,第二次i = 5。毫不奇怪它失败了!

问题是R的函数range和具有相同名称的Python函数完全不同。相当于Python的range称为seq。例如,seq(5)=c(1,2,3,4,5)seq(3,5)=c(3,4,5)seq(1,10,2)=c(1,3,5,7,9)。您也可以写1:n,它与seq(n)相同,m:nseq(m,n)相同(但&#39;的优先级为:&#39;是非常高,因此1:2*x被解释为(1:2)*x

通常,如果某些内容在R中不起作用,则应该从内部到外部打印子表达式。如果某个子表达式太大而无法打印,请使用str(x)(str表示&#34;结构&#34;)。永远不要认为Python和R中的函数是相同的!如果有一个具有相同名称的函数,它通常会做不同的事情。

在旁注中,您可以只写dim(I.df.nocov)[2]而不是ncol(I.df.nocov)(还有一个函数nrow)。