首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环遍历R中的列

循环遍历R中的列
EN

Stack Overflow用户
提问于 2009-10-25 19:37:59
回答 3查看 45.5K关注 0票数 8

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

我有两个问题:

  1. --我无法让它开始工作--在我读过的R articles中,
  2. 循环似乎是不鼓励的。是否有其他方法可供选择,如果没有,是否有关于如何执行循环的示例?
EN

回答 3

Stack Overflow用户

发布于 2009-10-25 21:04:57

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

代码语言:javascript
运行
复制
#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所指出的,只有当循环导致问题时,才应该考虑优化循环。尽管如此,我当然更喜欢阅读和写作。

代码语言:javascript
运行
复制
dat$y <- dat$x^2

至:

代码语言:javascript
运行
复制
for(i in 1:length(dat$x)){
  dat$y[i] <- dat$x[i]^2
}

..。如果可能的话。

票数 15
EN

Stack Overflow用户

发布于 2009-10-25 23:31:03

如果parse.smiles()是要应用于向量"vec“的所有条目的函数,则可以使用:

代码语言:javascript
运行
复制
lapply(1:length(vec),parse.smiles(vec[i]))
票数 1
EN

Stack Overflow用户

发布于 2009-11-04 03:57:43

不鼓励循环的唯一原因是它太慢了。R被设计成一次工作在向量上,并且有很多功能来实现这一点。整个家庭,以及像Vectorize这样的功能来帮助解决问题。所以,成语是,如果你使用for循环,你不会在R中考虑,但有时循环确实是合适的。

要用R的思维方式实现这一点,请将函数矢量化,如果函数尚未向量化(请参阅Vectorize函数),然后用整个列作为参数调用该函数,并将其分配给新列。

代码语言:javascript
运行
复制
f<-Vectorize(function(x,...),'x')
data$newcolumn<-f(data[,1])

应用族(应用、应用)也是可供选择的。大多数本机R函数已经向量化了,但是在传递应该被解释为向量的额外参数时要小心。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1621848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档