cat() 在使用 tapply 时返回不需要的列表
cat() returning undesired list when using tapply
当我运行这段代码时:
a <- mtcars[,c("gear", "qsec")]
c <- tapply(a[,2], a[,1], length)
sapply(rownames(c), function(x) cat("Gear", x, "contains", c[x], "qsec\n"))
我想得到这个:
Gear 3 contains 15 qsec
Gear 4 contains 12 qsec
Gear 5 contains 5 qsec
但我明白了:
Gear 3 contains 15 qsec
Gear 4 contains 12 qsec
Gear 5 contains 5 qsec
$`3`
NULL
$`4`
NULL
$`5`
NULL
最后一部分是从哪里来的,我该如何去掉它?
您可以用 invisible
包装它,这样列表元素就不会在 R 控制台中打印出来。
invisible(sapply(rownames(c),
function(x) cat("Gear", x, "contains", c[x], "qsec\n")))
Gear 3 contains 15 qsec
Gear 4 contains 12 qsec
Gear 5 contains 5 qsec
lapply
(因此,sapply
)有一个 return 值,该值由函数调用的 return 值构成(NULL
示例)在循环中。如果您不想要 return 值并且只想要打印或绘图等副作用,您应该使用 for
循环。
实际上,您不需要循环(*apply 或 for)即可:
> cat(paste("Gear", rownames(c), "contains", c, "qsec", collapse = "\n"))
Gear 3 contains 15 qsec
Gear 4 contains 12 qsec
Gear 5 contains 5 qsec
当我运行这段代码时:
a <- mtcars[,c("gear", "qsec")]
c <- tapply(a[,2], a[,1], length)
sapply(rownames(c), function(x) cat("Gear", x, "contains", c[x], "qsec\n"))
我想得到这个:
Gear 3 contains 15 qsec
Gear 4 contains 12 qsec
Gear 5 contains 5 qsec
但我明白了:
Gear 3 contains 15 qsec
Gear 4 contains 12 qsec
Gear 5 contains 5 qsec
$`3`
NULL
$`4`
NULL
$`5`
NULL
最后一部分是从哪里来的,我该如何去掉它?
您可以用 invisible
包装它,这样列表元素就不会在 R 控制台中打印出来。
invisible(sapply(rownames(c),
function(x) cat("Gear", x, "contains", c[x], "qsec\n")))
Gear 3 contains 15 qsec
Gear 4 contains 12 qsec
Gear 5 contains 5 qsec
lapply
(因此,sapply
)有一个 return 值,该值由函数调用的 return 值构成(NULL
示例)在循环中。如果您不想要 return 值并且只想要打印或绘图等副作用,您应该使用 for
循环。
实际上,您不需要循环(*apply 或 for)即可:
> cat(paste("Gear", rownames(c), "contains", c, "qsec", collapse = "\n"))
Gear 3 contains 15 qsec
Gear 4 contains 12 qsec
Gear 5 contains 5 qsec