在需要更改的变量上使用for()

在需要更改的变量上使用for(),r,for-loop,data.table,R,For Loop,Data.table,我希望能够使用for()loop来自动化运行在许多变量上的相同操作,从而修改它们 下面是最简单的设计示例: varToChange = list( 1:10, iris$Species[1:10], letters[1:10]) # assume that it has many more than just 3 elements varToChange for (i in varToChange ) { if (is.character(y)) i <- as.integer(as.

我希望能够使用
for()
loop来自动化运行在许多变量上的相同操作,从而修改它们

下面是最简单的设计示例:

varToChange = list( 1:10, iris$Species[1:10], letters[1:10]) # assume that it has many more than just 3 elements
varToChange
for (i in varToChange ) {
  if (is.character(y)) i <- as.integer(as.ordered(i))
  if (is.factor(y)) i <- as.integer(i)
}
varToChange # <-- Here I want to see my elements as integers now
varToChange=list(1:10,iris$Species[1:10],字母[1:10])#假设它有远不止3个元素
瓦托换
对于(我在varToChange){

如果(is.character(y))i不需要for循环,只需在每个列表项上映射一个函数即可

varToChange = list( 1:10, iris$Species[1:10], letters[1:10])     
myfun <- function(y) {
  if (is.character(y)) y <- as.integer(as.ordered(y))
  if (is.factor(y)) y <- as.integer(y)
  y
}
varToChange <- Map(myfun, varToChange)
varToChange=list(1:10,iris$Species[1:10],字母[1:10])

myfun不需要循环,只需在每个列表项上映射一个函数即可

varToChange = list( 1:10, iris$Species[1:10], letters[1:10])     
myfun <- function(y) {
  if (is.character(y)) y <- as.integer(as.ordered(y))
  if (is.factor(y)) y <- as.integer(y)
  y
}
varToChange <- Map(myfun, varToChange)
varToChange=list(1:10,iris$Species[1:10],字母[1:10])

myfun对于R中的迭代,您有两种选择:迭代变量本身,或者迭代它们的索引。我通常建议迭代索引。这个案例说明了这一点的一个强大优势,因为如果您使用索引,您的问题就不是问题

varToChange = list( 1:10, iris$Species[1:10], letters[1:10])
for (i in seq_along(varToChange)) {
  if (is.character(varToChange[[i]])) varToChange[[i]] <- as.integer(as.factor(varToChange[[i]]))
  if (is.factor(varToChange[[i]])) varToChange[[i]] <- as.integer(varToChange[[i]])
}
varToChange=list(1:10,iris$Species[1:10],字母[1:10])
适用于(i按顺序排列(变量变化)){

如果(is.character(varToChange[[i]])varToChange[[i]]]在R中有两种迭代选择,迭代变量本身,或者迭代它们的索引。我通常建议迭代索引。这个例子说明了这一点的一个强大优势,因为如果使用索引,您的问题就不是问题

varToChange = list( 1:10, iris$Species[1:10], letters[1:10])
for (i in seq_along(varToChange)) {
  if (is.character(varToChange[[i]])) varToChange[[i]] <- as.integer(as.factor(varToChange[[i]]))
  if (is.factor(varToChange[[i]])) varToChange[[i]] <- as.integer(varToChange[[i]])
}
varToChange=list(1:10,iris$Species[1:10],字母[1:10])
适用于(i按顺序排列(变量变化)){
if(is.character(varToChange[[i]])varToChange[[i]]
f<- function(dt, x, y, k) {
  args <- Map(function(x) getColName(dt, x), list(x=x,y=y,k=k))

  ggplot(dt, aes_string(args$x,args$y, col=args$k)) + geom_jitter(alpha=0.1)
}
f(diamonds, 1,7,2)
varToChange = list( 1:10, iris$Species[1:10], letters[1:10])
for (i in seq_along(varToChange)) {
  if (is.character(varToChange[[i]])) varToChange[[i]] <- as.integer(as.factor(varToChange[[i]]))
  if (is.factor(varToChange[[i]])) varToChange[[i]] <- as.integer(varToChange[[i]])
}