如何将i视为循环的变量

时间:2015-10-22 03:49:22

标签: r

我有一堆我想要读入R中的if语句的值。即:

year_1 , year_2
等等。 我想使用for循环或矢量化方法来测试每一个,但我不熟悉R而不是C ++。 所以我想实现以下目标:
for(i in 1:15) {
     if(year_[i] !=NULL) {
     count = count + 1
     }
}
不确定我是不是在寻找合适的东西,或者R是不是很容易做到这一点。我过去已成功使用粘贴 for循环来自动命名新变量,但我还没有掌握。

更新 好吧,你的答案似乎是在正确的轨道上。我应该更具体一点,并说我正在从excel参数文件中读取数据并使用数据生成图。不同的数据集将具有不同的年份。这个问题的核心是告诉R多少年是活跃的,从param $ year_1到param $ year_15。所以我试图实际读取 param $ year_1 等等,并且基本上检查它是否为空,这将让我知道这个特定数据集使用了多少年。当我尝试

时 它说没有找到价值。

更新2

我确信这方面的困难归结于我的描述。但这正是我想要制作的,但是自动化到几行,因为我知道我将要在未来做类似的操作。实际数据是无关紧要的。这个非自动化版本完全符合我的要求。

非自动代码

在C ++中这么简单,但是我必须在R中学习它。

1 个答案:

答案 0 :(得分:3)

听起来你有一个类似于列表的结构,其中包含名称year_1year_2,...,year_15,你想要检查其中有多少是null或者有缺少第一个元素。您可以使用标准索引来限制这些年份的元素,sapply来检查哪些是空的,sum来添加这些值:

which(sapply(paste0("year_", 1:15), function(x) {
  is.null(param[[x]]) || param[[x]][1] == ''
}))
#  year_2  year_5  year_9 year_10 year_11 year_12 year_14 year_15 
#       2       5       9      10      11      12      14      15 

数据:

param <- list(ID = 1:10, year_1 = 1:5, year_2 = NULL, year_3 = 1:7, year_4 = 1:2, year_5 = NULL, year_6 = 14, year_7 = 1:3, year_8 = 1:9, year_9 = NULL, year_10 = NULL, year_11 = NULL, year_12 = NULL, year_13 = 1:7, year_14 = NULL, year_15 = NULL)