为什么sapply(…,函数(x)print(x))返回其输入的两份副本?
有一个data.frame,我用为什么sapply(…,函数(x)print(x))返回其输入的两份副本?,r,R,有一个data.frame,我用sapply打印它: df <- data.frame(name=c("alice","becka","james","jeffery","john"), sex=c("F","M","M","F","M"), age=c(13,13,12,13,12), height=c(56.5,65.3,57.3,62.5,69),
sapply
打印它:
df <- data.frame(name=c("alice","becka","james","jeffery","john"),
sex=c("F","M","M","F","M"),
age=c(13,13,12,13,12),
height=c(56.5,65.3,57.3,62.5,69),
weight=c(84,98,83,84,99.5),stringsAsFactors = FALSE)
sapply(df,function(x){print(x)})
[1] "alice" "becka" "james" "jeffery" "john"
[1] "F" "M" "M" "F" "M"
[1] 13 13 12 13 12
[1] 56.5 65.3 57.3 62.5 69.0
[1] 84.0 98.0 83.0 84.0 99.5
name sex age height weight
[1,] "alice" "F" "13" "56.5" "84"
[2,] "becka" "M" "13" "65.3" "98"
[3,] "james" "M" "12" "57.3" "83"
[4,] "jeffery" "F" "13" "62.5" "84"
[5,] "john" "M" "12" "69" "99.5"
为什么结尾有一个data.frame作为整个输出的一部分
name sex age height weight
[1,] "alice" "F" "13" "56.5" "84"
[2,] "becka" "M" "13" "65.3" "98"
[3,] "james" "M" "12" "57.3" "83"
[4,] "jeffery" "F" "13" "62.5" "84"
[5,] "john" "M" "12" "69" "99.5"
您可能应该使用skip=13忽略标题。或者用“中国”作为起跑线。通过将第9行粘贴到第10行(或使用
month.abb
),您可以在之后一起解析一组替代列名。这将使您避免将专栏作为因素阅读的复杂性
x<- read.fwf(textConnection(ll[13:i2]), widths = c(20,-1,rep(c(7,-1),13)))
> str(x)
'data.frame': 39 obs. of 14 variables:
$ V1 : Factor w/ 39 levels "All Other ",..: 8 19 6 4 26 36 35 3 39 21 ...
$ V2 : num 1268 1149 300 253 246 ...
$ V3 : num 1279 1135 288 256 258 ...
$ V4 : num 1276 1083 286 254 257 ...
x str(x)
“data.frame”:39 obs。在14个变量中:
$V1:系数w/39“所有其他”等级,…:81964263533921。。。
$V2:num12681149300253246。。。
$V3:num12791135 288 256 258。。。
$V4:num12761083286254 257。。。
print
返回一个值,sapply
将其结果转换为矩阵
。在本例中,它打印您要求它打印的所有内容,然后返回其值,即字符矩阵。使用不可见
隐藏第二步:
> invisible(sapply(df,function(x){print(x)}))
[1] "alice" "becka" "james" "jeffery" "john"
[1] "F" "M" "M" "F" "M"
[1] 13 13 12 13 12
[1] 56.5 65.3 57.3 62.5 69.0
[1] 84.0 98.0 83.0 84.0 99.5
OP期望的“可信或官方来源”可通过以下示例找到:
> a <- print('bah')
> a
[1] "bah"
>a
[1] “呸”
编辑:哎呀。
?print.default
上的文档非常明确地说它返回了参数。(谢谢,@joran。)我仍然希望有一个“价值”部分再次提到它,不过…请提供。不要发布截图。尤其是当他们无法接近的时候。哇,这个问题现在看起来和德温和阿南达回答的完全不同。。。此外,我在问题中没有看到任何“级别”的提及,但它出现在标题中。?print
中的第一句话是“print打印其参数并以不可见的方式返回”。@joran谢谢;编辑。我宁愿看到一个冗余的“值”部分来重新显示它,因为我无法从文档顶部读取我知道有/应该有一个部分只用于我想要的信息。:)我真的同意。也许有些人认为函数的主要用途是它们的副作用,它们不需要一个值部分,但我更希望有一个值部分,即使它所说的是“不可见地返回NULL”之类的。
> a <- print('bah')
> a
[1] "bah"