R:`scan`无证件的行为?

时间:2013-09-11 08:38:11

标签: r

证明正在考虑的行为:

sst = scan(text='44 45 46 47 48 49 50\n51 52 53 54 55 56 57',
           what=list(age='numeric',
                     weight='numeric', 
                     oxygen='numeric', 
                     runTime='numeric', 
                     restPulse='numeric', 
                     runPulse='numeric', 
                     maxPulse='numeric'))

我希望这(根据文档)给出一个包含七个数字列的列表。它实际返回的是:

R> str(sst)
List of 7
 $ age      : chr [1:2] "44" "51"
 $ weight   : chr [1:2] "45" "52"
 $ oxygen   : chr [1:2] "46" "53"
 $ runTime  : chr [1:2] "47" "54"
 $ restPulse: chr [1:2] "48" "55"
 $ runPulse : chr [1:2] "49" "56"
 $ maxPulse : chr [1:2] "50" "57"

这会产生正确答案。

sst = scan(text='44 45 46 47 48 49 50 51 52 53 54 55 56 57',
           what=list(age=double(),
                     weight=double(), 
                     oxygen=double(), 
                     runTime=double(), 
                     restPulse=double(), 
                     runPulse=double(), 
                     maxPulse=double()))

但为什么第一句话失败了?我错过了scan的一些微妙之处吗?

1 个答案:

答案 0 :(得分:2)

参数what应由所需类型的对象提供,而不是由类型名称提供。

请参阅?scan

  

什么

     

提供要读取的数据类型的类型。

示例:

scan("ex.data", what = list("","","")

每个""代表一个空字符串,表示所需类型是一个字符串。

在你的情况下,你可以这样做:

sst = scan(text='44 45 46 47 48 49 50\n51 52 53 54 55 56 57',
       what=list(age=0,
                 weight=0, 
                 oxygen=0, 
                 runTime=0, 
                 restPulse=0, 
                 runPulse=0, 
                 maxPulse=0))

str(sst)
List of 7
 $ age      : num [1:2] 44 51
 $ weight   : num [1:2] 45 52
 $ oxygen   : num [1:2] 46 53
 $ runTime  : num [1:2] 47 54
 $ restPulse: num [1:2] 48 55
 $ runPulse : num [1:2] 49 56
 $ maxPulse : num [1:2] 50 57

或者您尝试的解决方案也适用。