【发布时间】:2016-11-19 11:10:32
【问题描述】:
几天来,我试图为嵌套 ifelse 和嵌套循环的组合获得正确计数的输出。我想要么我的嵌套完全错误,要么我尝试计算输出的方式,也许两者兼而有之。
ifelse.1 = function(input_matrix) {
result = 1
output = 0
sum_output = 0
for(i in 1:dim(input_matrix)[1]){
for(j in 1:dim(word_list_matrix-one)[1]){
for(k in 1:dim(word_list_matrix_two)[1]){
ifelse(str_detect(input_matrix[i], ("word")) == TRUE
& str_detect(input_matrix[i], word_list_matrix_one[j]) == TRUE
& str_detect(input_matrix[i], word_list_matrix_two[k]) == TRUE,
output[i] <- output[i] + result,
ifelse(
str_detect(input_matrix[i], word_list_matrix_three[j]) == TRUE
& str_detect(input_matrix[i], word_list_matrix_two[k]) == FALSE,
output[i] <- output[i] + result, NA))
sum_output = output[i]
} # k-loop
} # j-loop
} # i-loop
return(sum_output)
}
该代码是关于在多个单列矩阵的多行中检测某些字符串(通过包stringr 的str_detect 函数)。
所以在input_matrix 的第一个row [i] 中,应该检测到word_list_matrix 中row [j] 给出的字符串。
只要上面提到的 ifelse 之一为真,就应该在输出中添加 +1,在所有 i 个周期结束时,应该返回输出的总和。
问题是我得到NA 作为答案,或者(对于此代码的某些变体)我得到的输出计数多于我输入的输入。
我知道 ifelse 应该能够计算向量,这可能会导致不需要循环,但尽管我从来没有这样工作,但我必须计算的矩阵长度不同。
我希望我设法提供了一个具有足够细节的良好、可重复的问题。 非常感谢您的宝贵时间。
【问题讨论】:
-
澄清一下,您想要检测和计算
input_matrix中的元素数量,其中包含包含all 您的word_list_matrix_N中的单词的文本序列变量。对吗? -
您似乎正试图为每个
if语句增加一个output的值。如果是这样,您需要每次都引用output,否则您会要求 R 寻找不同的值。通过尝试使用output[i]调用它,您要求 R 每次都找到一个不同的值,看起来您希望相同的值继续计数。所以使用output而不是output[i]。 -
@JaimeCR 说得对,如果检测到 word_list_matrix_1 中的一个词,则还要从 word_list_matrix_2 中搜索另一个词,依此类推
-
@rosscova 有点向前迈进了一步,而不是简单地返回 NA 现在他给出了一个应该是的数字,但不是预期的数字。对于预期提供 3 个结果的数据样本,该函数提供 15 的输出
标签: r