使用“ for”遍历变量时如何从列表中引用变量

时间:2019-12-16 00:27:47

标签: r loops for-loop

我是来自Stata的R语言的初学者,我的第一个头痛是弄清楚如何遍历对所有名称执行相同操作的名称列表。名称是来自数据帧的变量。我尝试以这种方式定义列表:mylist<- c("df$name1", "df$name2"),然后尝试:for (i in mylist) { i },我希望这等效于先写df$name1然后写df$name2以使R打印内容数据帧name1中名称为name2df的变量中。我尝试了其他命令,例如在i=NULL命令中删除变量for,但这也不起作用。如果有人能告诉我我做错了什么,我将不胜感激。我想知道它是否与我编写i的方式有关,也许R不会将其解释为表示我的字符向量的元素。

为进一步说明,我将写出本例中用于Stata的代码。我不是要求Stata打印变量的内容,而是让它给出变量的摘要统计信息,即编号。使用summary命令查看观测值,均值,标准差以及最小值和最大值。在Stata中,我不需要引用数据框,因为我通常在内存中只有一个数据集,而我只需要写:

foreach i in name1 name2 { #name1 and name2 being the names of the variables
  summarize `i' 
}   

到目前为止,我无法使用R中的for函数来做同样的事情,我天真的认为这是:

mylist<-c("df$name1", "df$name2") 
  for (i in mylist) {
    summary(i) 
  }

2 个答案:

答案 0 :(得分:0)

您可能只需要打印名称才能看到它。例如,如果我们有一个像这样的数据框:

df <- data.frame("A" = "a", "B" = "b", "C" = "c")

df
# >   A B C
# > 1 a b c

names(df)
# "A" "B" "C"

我们可以使用names(df)向量上的for循环对名称进行操作(无需定义特殊列表)。

for (name in names(df)){
  print(name)
  # your code here
}

答案 1 :(得分:0)

与pata相比,

R更不让您使用字符串/局部语言作为代码。您可以使用eval之类的函数来完成此操作,但总的来说,这并不是理想的方法。

但是,对于变量名,您很幸运,因为您可以使用字符串从data.frame[[]]中提取变量。例如:

df <- data.frame(a = 1:10,
                 b = 11:20,
                 c = 21:30)

for (i in c('a','b')) {
  print(i)
  print(summary(df[[i]]))
}

注意:

  1. 如果要从for循环中打印对象,则需要使用print()
  2. 我假设您正在使用summary()函数作为示例,因此需要循环。但是,如果您真的只想对每个变量进行汇总,则summary(df)将全部完成,或者summary(df[,c('a','b')])将仅完成ab。或查看stargazer()程序包中的stargazer函数,该函数具有默认值,对于Stata用户而言,感觉非常舒适。