Проблема в том, что 'ds' - это строка, нам нужно получить значение с помощью mget
или get
Map(function(x, ds){
acc(table(get(ds)$Species, cutree(hclust(dist(get(ds)[,1:4]),method=x),3)))
}, as.character(tests[[1]]), as.character(tests[[2]]))
Его можно сделать более компактным, если мы используем mget
Map(function(x, ds) {
acc(table(ds$Species, cutree(hclust(dist(ds[, 1:4]), method = x), 3)))
}, as.character(tests[[1]]), mget(as.character(tests[[2]])))
#$ward.D
#$ward.D$First
#[1] 150
#$ward.D$Second
#[1] 6492
#$ward.D2
#$ward.D2$First
#[1] 150
#$ward.D2$Second
#[1] 6352
#....
Если мы хотим изменить «тесты» со строкой, имеющей подмножество индекса столбца, вместо mget
используйте eval(parse
tests <- tests[1:4, ] # subset the first four rows
tests$DS <- c("iris0[,1:4]","iris1[,1:3]","iris2[,2:4]", "iris0[, 1:3]")
Map(function(x, ds) {
ds1 <- eval(parse(text = ds))
sp <- get(sub("\\s*\\[.*", "", ds))$Species
acc(table(sp, cutree(hclust(dist(ds1), method = x), 3)))
}, as.character(tests[[1]]), as.character(tests[[2]]))