Ich versuche, eine Übereinstimmung über eine Liste zu tun, aber ich bin nicht in der Lage, eine Art von Ausgabe von meiner Funktion zu erhalten. die schleife versagt bei vec [3] deshalb habe ich trycatch benutzt. aber ich bin immer noch nicht in der Lage, irgendwelche Übereinstimmungen in der Ausgabe meiner Funktion zu bekommen. Ich kann nichts ausgeben. könnte das gleiche auch mit der anwendungsfamilie gemacht werden?Schleife über einen Vektor mit trycatch
Ich versuche, loc über vec. vec [3] wird scheitern, da ich keine Übereinstimmung habe.
vec=c('i am going to ooty corbett','i have to go to ooty', 'i have to go to manali')
loc=c('ooty','corbett')
ist der Vektor im Versuch, für die Übereinstimmungen zu bauen.
out=NULL
res_m=function(x,y){
out[i]=tryCatch(
{
for(i in 1:length(y)){
print(i)
x=tolower(x)
y=strsplit(y[i], " ")[[1]]
out[i]=intersect(x,y)
}
},error=function(cond) {
out[i]=NA
},
finally=print("can do")
)
return(out[i])
}
res=res_m(loc,vec)
Mit ifelse, ich habe es zur Arbeit. aber immer noch, wenn ich eine Lösung aus meinem Ansatz herausholen könnte.
res=NULL
out=NULL
for (i in 1:length(y)) {
print(i)
x = tolower(x)
z = strsplit(y[i], " ")[[1]]
out = intersect(x,z)
if (length(out) == 0) {
res[i] = NA
}else{
res[[i]] = out
}
}
Der Fehler verwenden könnte, ist wahrscheinlich, weil 'intersect' gibt eine 0-Länge Vektor, der zugeordnet ist "raus". Sie können diesen Fall also mit einem 'if/else' vor der Zuweisung behandeln. Alternativ, siehe 'grepl (einfügen (loc, collapse =" | "), vec)' oder 'regmatches (vec, gregexpr (einfügen (loc, collapse =" | "), vec))' –
@alexis_laz: yeah the vec [3] gibt null zurück. Deshalb habe ich trycatch verwendet. Ich werde es mit ifelse und dem anderen auch versuchen. aber ich denke, mit Set-Betrieb wäre schnell. also habe ich an linien von apply family gedacht. Danke für die Hilfe. –
Verwenden Sie 'if (length (...)) {} else {}'. Sie haben nicht wirklich gesagt, dass ein Fehler aufgetreten ist, daher erscheint 'tryCatch' nicht angemessen. –