使用'mapply'创建输出结果

4

我想为每个条目创建一个带有项目符号的输出

数据

我的数据框中只有一行:

structure(list(Dimensions = 2L, Continuity = structure(2L, .Label = c("", 
"continuous"), class = "factor"), Differentiability = structure(2L, .Label = c("", 
"differentiable", "non-differentiable"), class = "factor"), Convexity = structure(2L, .Label = c("", 
"convex", "non-convex"), class = "factor"), Modality = structure(3L, .Label = c("", 
"multimodal", "unimodal"), class = "factor"), Separability = structure(2L, .Label = c("", 
"non-separable", "non-separable,", "separable"), class = "factor"), 
    Scalability = structure(2L, .Label = c("", "non-scalable", 
    "scalable"), class = "factor"), Parametric = FALSE, Random = FALSE), row.names = 2L, class = "data.frame")

方法

mapply(function(x, y) cat("* ", y, ": ", as.character(x), "\n"), Descr, names(Descr))

期望输出

* Dimensions :  2
* Continuity :  continuous
* Differentiability :  differentiable
* Convexity :  convex
* Modality :  unimodal
* Separability :  non-separable
* Scalability :  non-scalable
* Parametric :  FALSE
* Random :  FALSE

实际结果

我离我想要的还很接近。但是,R不仅会打印所需部分,还会在后面添加所有列的列表。因此输出结果如下:

*  Dimensions :  2 
*  Continuity :  continuous 
*  Differentiability :  differentiable 
*  Convexity :  convex 
*  Modality :  unimodal 
*  Separability :  non-separable 
*  Scalability :  non-scalable 
*  Parametric :  FALSE 
*  Random :  FALSE 
$Dimensions
NULL

$Continuity
NULL

$Differentiability
NULL

$Convexity
NULL

$Modality
NULL

$Separability
NULL

$Scalability
NULL

$Parametric
NULL

$Random
NULL

除了能够正常工作的解决方案,我非常希望有人能够给我提示这里发生了什么。

2个回答

3

R中的*apply函数始终有一个输出。

解决此问题的一种方法是使用invisible调用它们:

invisible(mapply(function(x, y) cat("* ", y, ": ", as.character(x), "\n"), Descr, names(Descr)))
*  Dimensions :  2 
*  Continuity :  continuous 
*  Differentiability :  differentiable 
*  Convexity :  convex 
*  Modality :  unimodal 
*  Separability :  non-separable 
*  Scalability :  non-scalable 
*  Parametric :  FALSE 
*  Random :  FALSE 

purrr包有一组用于这个目的的walk函数集:

library(purrr)
walk2(Descr,names(Descr), function(x, y) cat("* ", y, ": ", as.character(x), "\n"))
*  Dimensions :  2 
*  Continuity :  continuous 
*  Differentiability :  differentiable 
*  Convexity :  convex 
*  Modality :  unimodal 
*  Separability :  non-separable 
*  Scalability :  non-scalable 
*  Parametric :  FALSE 
*  Random :  FALSE 

1

一种选项是将输出分配给变量:

x <- mapply(function(x, y) cat("* ", y, ": ", as.character(x), "\n"), Descr, names(Descr))


这样做可以完成任务。然而,现在我有一个毫无意义的变量 x,它既没有任何有意义的内容,也不需要它。 - Jan
那只是一个选项。 - Bulat
2
当然。我并不打算批评你或你的回答。我的意图是为每个人解释哪种解决方案更适合他们的需求。 - Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接