我有一堆我想要读入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中学习它。
答案 0 :(得分:3)
听起来你有一个类似于列表的结构,其中包含名称year_1
,year_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)