循环通过R中的列

时间:2009-10-25 19:38:00

标签: r statistics loops

我正在使用R's stats软件包,希望在column[x]中遍历all the rows of a dataframe,使用函数对列中的each cell中的数据进行操作并传递结果为新列(calculated result中的new columncolumn[x]中的数据对齐)

我有两个问题:

  1. 我无法让它工作
  2. 在我读过的R articles中似乎不鼓励
  3. 循环。是否有替代方法,如果没有,是否有人有一个如何进行循环的例子?

3 个答案:

答案 0 :(得分:11)

没有任何例子,很难知道如何回应。然而,您所描述的基本情况是:

#Just a very simple data frame
dat <- data.frame(x = c(1, 2, 3))
#Compute the squared value of each value in x
dat$y <- dat$x^2
#See the resultant data.frame, now with column y
dat

当你告诉R为一个矢量(或类似矢量的结构,如dat $ x)时,它知道分别对每个值求平方。您不需要在大多数情况下显式循环这些值 - 尽管如Dirk所说,如果它们导致您出现问题,您应该只担心优化循环。也就是说,我当然更喜欢阅读和写作

dat$y <- dat$x^2

为:

for(i in 1:length(dat$x)){
  dat$y[i] <- dat$x[i]^2
}

......尽可能。

答案 1 :(得分:1)

如果parse.smiles()是你想要应用于矢量“vec”的所有条目的函数,那么你可以使用:

lapply(1:length(vec),parse.smiles(vec[i]))

答案 2 :(得分:1)

不鼓励循环的唯一原因是它很慢。 R设计用于一次处理向量,并具有许多功能来实现此目的。整个申请家庭,以及Vectorize等功能帮助。所以成语是如果你使用for循环你没有在R中思考,但有时候循环真的是合适的。

要以R的思维方式执行此操作,请向量化您的函数,如果它尚未向量化(请参阅Vectorize函数),则以整列作为参数调用该函数,并将其分配给新列。

f<-Vectorize(function(x,...),'x')
data$newcolumn<-f(data[,1])

申请家庭(申请,申请,lapply,mapply,tapply)也是替代品。大多数本机R函数已经被向量化了,但是在传递应该被解释为向量的额外参数时要小心。