我正在使用R's stats
包,并希望在all the rows of a dataframe
中遍历column[x]
,使用函数对列中的each cell
中的数据进行操作,并将结果传递给一个新列( new column
中的calculated result
与column[x]
中的数据对齐)。
我有两个问题:
R articles
中,发布于 2009-10-25 21:04:57
没有任何例子,很难知道如何回应。然而,您所描述的基本情况是:
#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
}
..。如果可能的话。
发布于 2009-10-25 23:31:03
如果parse.smiles()是要应用于向量"vec“的所有条目的函数,则可以使用:
lapply(1:length(vec),parse.smiles(vec[i]))
发布于 2009-11-04 03:57:43
不鼓励循环的唯一原因是它太慢了。R被设计成一次工作在向量上,并且有很多功能来实现这一点。整个家庭,以及像Vectorize这样的功能来帮助解决问题。所以,成语是,如果你使用for循环,你不会在R中考虑,但有时循环确实是合适的。
要用R的思维方式实现这一点,请将函数矢量化,如果函数尚未向量化(请参阅Vectorize函数),然后用整个列作为参数调用该函数,并将其分配给新列。
f<-Vectorize(function(x,...),'x')
data$newcolumn<-f(data[,1])
应用族(应用、应用)也是可供选择的。大多数本机R函数已经向量化了,但是在传递应该被解释为向量的额外参数时要小心。
https://stackoverflow.com/questions/1621848
复制相似问题