我正在学习R,到目前为止,除了以下问题我没有遇到任何麻烦,我希望有人能帮助我理解。
如果我按以下方式创建角色向量test1 <- c("a", "b", "c")
我得到一个字符类型的向量,我可以通过索引器test1[n]
访问向量的每个成员。
这是有道理的,并做我理解应该做的事情。
但是,如果我test2 <- readLines("file1.txt")
其中 file1.txt 包含一行(几个随机单词空格分隔),我会得到一个类字符的向量(与第一个案例),我不能使用索引器(除非有方法,我还不知道)。
问题:
strsplit()
之外,还有一种方法可以像c()
那样在加载时从文件中分解它吗?非常感谢任何有助于理解这种语言内容的帮助!
答案 0 :(得分:1)
为什么两者都是基于字符类型的,但它们的存储方式不同
两者都以完全相同的方式存储。 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"