给出以下向量包含变量名称:
variables = c("bla_P_blub","bla_K_blib","blo_P_blub","blu_I_blub","bli_K_blub")
我想要做的是,如果variables[i]
包含 K ,那么如果它包含 P 或 I ,请执行然后做某事其他
我的方法如下,但它不起作用:
class_var = 1
if(grep("_K_",variables[i]) > 0){
class_var = 1
} else{
class_var = 0
}
if (class_var == 1){
do sth.
}
if (class_var == 0){
do sth. else
}
问题是如果variables[i]
不包含 K ,那么我会得到结果:
if中的错误(" K ",变量[12])> 0){:参数是 零长度
有什么建议吗?
提前致谢!
答案 0 :(得分:3)
我会使用正则表达式来提取触发正确函数所需的信息,因此在您的情况下它是'_X_'
。
稍后我将使用重要信息迭代向量并使用开关
您可以在{}
中使用switch
来执行更多功能,然后只需打印...
variables = c("bla_P_blub","bla_K_blib","blo_P_blub","blu_I_blub","bli_K_blub")
myvars <- sub('.*_([A-Z])_.*', '\\1', variables)
for(myvar in myvars) {
switch(myvar,
P=cat('it is a P\n'),
K={
cat('it is a K\n')
cat(sprintf('%s\n',date()))
},
cat(sprintf('it was an %s\n', myvar)))
}
返回以下内容
it is a P
it is a K
Fri Jul 17 13:13:51 2015
it is a P
it was an I
it is a K
Fri Jul 17 13:13:51 2015
答案 1 :(得分:1)
最简单的修复是使用长度,因为没有匹配给出一个空向量:
if(length(grep("_K_",variables[i]) > 0)){
答案 2 :(得分:1)
在r中,grep("K", "YourString")
返回索引向量。您需要使用grep("K", variables[12])
测试length(grep("_K_",variables[i])
的长度。
如果长度> 0然后找到匹配。否则,您的变量包含K