2015-09-28 36 views
0

我正在学习R,到目前为止,除了以下问题外,我没有遇到任何麻烦,我希望有人能帮助我理解。为什么组合产生一个不同于readLines()函数的行为

如果创建以下列方式test1 <- c("a", "b", "c") 字符矢量I得到类型字符之一矢量,我可以通过一个索引test1[n]访问该向量中的每个成员。

这是有道理的,并做我理解它应该做的。

但是如果我做test2 <- readLines("file1.txt")其中FILE1.TXT包含一个线路(几个随机字空格分隔)。我得到类字符的一个矢量(同第一种情况),并我不能使用索引器(除非有办法,我还不知道)。

问题:

  1. 为什么两者都基于char类型,但它们存储不同
  2. 如何人能告诉他们分开不知道他们是如何被创建
  3. 除了使用strsplit()是有办法打破它像c()在加载时从文件?

任何帮助理解这种语言的内部是狂热赞赏!

+0

尝试'扫描( “FILE1.TXT”, “”,九月=““) '而不是'readLines()'来获得分隔值 –

回答

1

为什么都是char类型基础,但它们存储不同

两者都存储在完全相同的方式。 R没有特定的类型来表示单个字符,因此字符不是集合。

在你必须简单地长度为3的字符向量,其中每个元件具有尺寸1

test1 <- c("a", "b", "c") 
typeof(test1) 
# [1] "character" 
length(test1) 
# [1] 3 
nchar(test1) 
# [1] 1 1 1 

和在输入文件长度等于行数的在所述第二情况下的字符向量和所述第一壳体每个元件具有大小等于串长度:

writeLines("foobar", con="file1.txt") 
test2 <- readLines("file1.txt") 
typeof(test2) 
# [1] "character" 
length(test2) 
# [1] 1 
nchar(test2) 
# [1] 6 

除了使用strsplit()是有办法进行分解,如C()不会在加载时从文件?

如果你有固定大小的元素,你可以尝试readBin但一般来讲strisplit是要走的路:

f <- "file1.txt" 
readBin(f, what = 'raw', size = 1, n = file.info(f)$size) %>% sapply(rawToChar) 
# [1] "f" "o" "o" "b" "a" "r" "\n" 
相关问题