保存的循环输出与控制台中的输出不同 - R
Saved for loop output is different to that in console - R
我正在尝试从 BiodiversityR
包中保存 CAPdiscrim
函数的分类成功率。 CAPdiscrim
(https://www.rdocumentation.org/packages/BiodiversityR/versions/2.7-2/topics/CAPdiscrim) 的插图给出了一个关于如何获得分类成功率的例子:
library(BiodiversityR)
library(vegan)
library(MASS)
data(dune)
data(dune.env)
for (mseq in 1:14) {
CAPdiscrim.result <- CAPdiscrim(dune~Management, data=dune.env,
dist="bray", axes=2, m=mseq)
}
这会自动在控制台中打印分类成功百分比,例如。
Overall classification success: 40 percent
BF (n=3) correct: 0 percent
HF (n=5) correct: 40 percent
NM (n=6) correct: 33.3333333333333 percent
SF (n=6) correct: 66.6666666666667 percent
然而,当在循环外调用 CAPdiscrim.result
对象时,它会产生实际的 CAPdiscrim
结果,例如 (str(CAPdiscrim.result
)).
List of 14
$ PCoA : num [1:20, 1:2] -0.3547 -0.2946 -0.0728 -0.0693 -0.3071 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:20] "1" "2" "3" "4" ...
.. ..$ : NULL
$ m : int 14
$ tot : num 4.3
$ varm : num 107
$ group : Factor w/ 4 levels "BF","HF","NM",..: 4 1 4 4 2 2 2 2 2 1 ...
$ CV : Factor w/ 4 levels "BF","HF","NM",..: 1 2 4 4 3 2 2 1 1 2 ...
$ percent : num 40
$ x : num [1:20, 1:3] 7.64 0.18 9.43 8.88 -1.93 ...
等等等
我觉得我已经尽了一切努力来保存 运行 和 for loop
时在控制台中打印的确切输出。我尝试创建空 list
s,空 data.frame
s,绑定结果。我只是不知道如何存储它!任何帮助将不胜感激。
for 循环将只保留最后 CAPdiscrim.result 的 mseq 值,同时覆盖循环中的前 13 个结果。
与其丢失它们,不如使用 lapply
CAPdiscrim.result <- lapply(1:14, function(mseq){
CAPdiscrim(dune~Management, data=dune.env,
dist="bray", axes=2, m=mseq)
})
这将生成一个包含 14 个结果的列表,每个结果对应一个 mseq 值。
如果您感兴趣的是分类成功的控制台输出,那么最简单的方法是将控制台输出作为文本文件接收。
sink("output_text.txt")
for (mseq in 1:14) {
CAPdiscrim.result <- CAPdiscrim(dune~Management, data=dune.env,
dist="bray", axes=2, m=mseq)
}
sink()
在函数调用期间,这些字符串正在通过 cat()
写入控制台。如果要获取这些值,请使用 capture.output
。例如
myout<-lapply(1:14, function(mseq) {
msg <- capture.output(
CAPdiscrim.result <- CAPdiscrim(dune~Management, data=dune.env,
dist="bray", axes=2, m=mseq),
type="output")
list(msg=msg, result=CAPdiscrim.result)
})
这将捕获列表中的结果和字符串。您可以使用
获取字符串
myout[[1]]$msg
例如。
我正在尝试从 BiodiversityR
包中保存 CAPdiscrim
函数的分类成功率。 CAPdiscrim
(https://www.rdocumentation.org/packages/BiodiversityR/versions/2.7-2/topics/CAPdiscrim) 的插图给出了一个关于如何获得分类成功率的例子:
library(BiodiversityR)
library(vegan)
library(MASS)
data(dune)
data(dune.env)
for (mseq in 1:14) {
CAPdiscrim.result <- CAPdiscrim(dune~Management, data=dune.env,
dist="bray", axes=2, m=mseq)
}
这会自动在控制台中打印分类成功百分比,例如。
Overall classification success: 40 percent
BF (n=3) correct: 0 percent
HF (n=5) correct: 40 percent
NM (n=6) correct: 33.3333333333333 percent
SF (n=6) correct: 66.6666666666667 percent
然而,当在循环外调用 CAPdiscrim.result
对象时,它会产生实际的 CAPdiscrim
结果,例如 (str(CAPdiscrim.result
)).
List of 14
$ PCoA : num [1:20, 1:2] -0.3547 -0.2946 -0.0728 -0.0693 -0.3071 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:20] "1" "2" "3" "4" ...
.. ..$ : NULL
$ m : int 14
$ tot : num 4.3
$ varm : num 107
$ group : Factor w/ 4 levels "BF","HF","NM",..: 4 1 4 4 2 2 2 2 2 1 ...
$ CV : Factor w/ 4 levels "BF","HF","NM",..: 1 2 4 4 3 2 2 1 1 2 ...
$ percent : num 40
$ x : num [1:20, 1:3] 7.64 0.18 9.43 8.88 -1.93 ...
等等等
我觉得我已经尽了一切努力来保存 运行 和 for loop
时在控制台中打印的确切输出。我尝试创建空 list
s,空 data.frame
s,绑定结果。我只是不知道如何存储它!任何帮助将不胜感激。
for 循环将只保留最后 CAPdiscrim.result 的 mseq 值,同时覆盖循环中的前 13 个结果。
与其丢失它们,不如使用 lapply
CAPdiscrim.result <- lapply(1:14, function(mseq){
CAPdiscrim(dune~Management, data=dune.env,
dist="bray", axes=2, m=mseq)
})
这将生成一个包含 14 个结果的列表,每个结果对应一个 mseq 值。
如果您感兴趣的是分类成功的控制台输出,那么最简单的方法是将控制台输出作为文本文件接收。
sink("output_text.txt")
for (mseq in 1:14) {
CAPdiscrim.result <- CAPdiscrim(dune~Management, data=dune.env,
dist="bray", axes=2, m=mseq)
}
sink()
在函数调用期间,这些字符串正在通过 cat()
写入控制台。如果要获取这些值,请使用 capture.output
。例如
myout<-lapply(1:14, function(mseq) {
msg <- capture.output(
CAPdiscrim.result <- CAPdiscrim(dune~Management, data=dune.env,
dist="bray", axes=2, m=mseq),
type="output")
list(msg=msg, result=CAPdiscrim.result)
})
这将捕获列表中的结果和字符串。您可以使用
获取字符串myout[[1]]$msg
例如。