Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么sapply(…,函数(x)print(x))返回其输入的两份副本?_R - Fatal编程技术网

为什么sapply(…,函数(x)print(x))返回其输入的两份副本?

为什么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),

有一个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),  
                 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"