我正在使用R's stats
软件包,希望在column[x]
中遍历all the rows of a dataframe
,使用函数对列中的each cell
中的数据进行操作并传递结果为新列(calculated result
中的new column
与column[x]
中的数据对齐)
我有两个问题:
R articles
中似乎不鼓励答案 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函数已经被向量化了,但是在传递应该被解释为向量的额外参数时要小心。