在列表中发出匹配字符串

时间:2018-05-01 16:42:07

标签: r

我正在尝试查看列表是否包含特定字符串,但我遇到了问题。

> k
[1] "Investment"
> t
[[1]]
[1] "Investment"     "Non-Investment"

> class(k)
[1] "character"
> class(t)
[1] "list"
> k %in% t
[1] FALSE

上面的代码不应该是TRUE而不是FALSE吗?

2 个答案:

答案 0 :(得分:3)

您需要function transformStack(target, stack){ var stackItem = stack.shift();//Copy Value var targetCopy = JSON.parse(JSON.stringify(target)); var stackCopy = JSON.parse(JSON.stringify(stack)); if(stackItem === "[]"){ return transformStackArray(targetCopy, stackCopy); } var nextTarget = targetCopy[stackItem]; if (stack.length > 0) return transformStack(nextTarget, stackCopy).then(handleResponse.bind(this,target, stackItem)); else return transformItem(nextTarget).then(handleResponse.bind(this,target, stackItem)); } /** * handleResponse - Helper function for merging objects for recursive function. * @param original - The original passed value * @param attribute - The name of the field to send * @param updated - The updated value * @returns {*} - Promise - Resolves to the merged object */ function handleResponse(original, attribute, updated){ original[attribute] = updated; return q(original); } function transformStackArray(target, stack){ var deferred = q.defer(); var promises = []; for(var x=0; x < target.length; x++){ var nextTarget = JSON.parse(JSON.stringify(target[x])); //Copies values so not by Ref any more if(stack.length > 0){ promises.push(transformStack(nextTarget, JSON.parse(JSON.stringify(stack)))); } else { promises.push(transformItem(nextTarget)); } } q.all(promises).then(function(updatedItem){ deferred.resolve(updatedItem); }).catch(function(error){ deferred.reject(error); }); return deferred.promise; } 列表:

unlist

注意我已将其更改为X和Y:X <- "investment" Y <- list(c("non-investment", "investment")) X %in% unlist(Y) 是基本函数,因此最好不要覆盖它,因为它可能会导致冲突!

要考虑的一件事是具有多个向量的列表,并确定是要搜索向量列表还是在特定向量内搜索。 然后你可以使用unlist同时检查所有向量,并使用方括号来检查特定向量。为了说明这一点,这里有t中的子列表和Y字符串位于第二个列表中,X告诉我们unlist位于X,而Y返回Y[[1]],因为FALSE仅检查第一个子列表:

%in%

请注意,如果您已将X <- "alpha" Y <- list(c("non-investment", "investment"), c("alpha", "beta")) X %in% unlist(Y) X %in% Y[[1]] 指定为向量 - 这实际上就是您的示例中的内容,因为没有其他子列表 - 那么您可以使用:

Y

答案 1 :(得分:1)

t的问题是它是一个长度为一的向量列表 - 尝试k %in% t[[1]]。您可能想要使用unlist()

编辑抱歉,矢量列表,而不是列表。