我正在尝试查看列表是否包含特定字符串,但我遇到了问题。
> k
[1] "Investment"
> t
[[1]]
[1] "Investment" "Non-Investment"
> class(k)
[1] "character"
> class(t)
[1] "list"
> k %in% t
[1] FALSE
上面的代码不应该是TRUE而不是FALSE吗?
答案 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()
。
编辑抱歉,矢量列表,而不是列表。