假设您有一个字符向量列表:
set.seed(42)
x <- lapply(sample(10:50), function(x) {
sapply(1:x, function(y) {
paste(sapply(y, sample, x=letters, size=sample(5:10, 1)), collapse='')
})
})
您希望在整个列表中应用矢量化操作。一个选项是unlist(x)
,然后应用矢量化函数:
y <- nchar(unlist(x))
将y
恢复为与x
相同的列表结构的最有效方法是什么?有没有更好的方法来解决这个问题?
答案 0 :(得分:4)
另一种方法是使用as.relistable
和relist
这样的函数:
y <- as.relistable(x)
z <- nchar( unlist(x) )
z <- relist(z,y)
str(head(z))
#List of 6
# $ : int [1:47] 7 8 6 6 6 5 8 10 10 5 ...
# $ : int [1:50] 7 9 9 6 7 10 7 6 10 8 ...
# $ : int [1:21] 8 7 9 5 9 10 5 5 8 9 ...
# $ : int [1:41] 5 9 9 9 5 5 5 5 10 9 ...
# $ : int [1:33] 9 5 9 9 8 9 7 9 6 10 ...
# $ : int [1:28] 5 5 5 9 8 8 8 6 9 6 ...
答案 1 :(得分:2)
我很难理解为什么lapply
不是答案(以及为什么Josh删除了他在6小时之前准确说出的答案。)
charcounts <- lapply(x, nchar )
str(head(charcounts))
List of 6
$ : int [1:47] 7 8 6 6 6 5 8 10 10 5 ...
$ : int [1:50] 7 9 9 6 7 10 7 6 10 8 ...
$ : int [1:21] 8 7 9 5 9 10 5 5 8 9 ...
$ : int [1:41] 5 9 9 9 5 5 5 5 10 9 ...
$ : int [1:33] 9 5 9 9 8 9 7 9 6 10 ...
$ : int [1:28] 5 5 5 9 8 8 8 6 9 6 ...