如何在R中创建默认仅显示首元素的自定义类对象?
解决方法
要实现你想要的效果,核心是给返回对象添加自定义类,并为这个类编写专属打印方法——让直接调用对象时默认只展示初始短语,同时保留通过$访问两个元素的能力。
修改后的函数代码
cipher <- function(word){ w0 <- tolower(unlist(strsplit(word, ""))) w1 <- c() shuffledletters <- sample(letters) for (i in seq_along(w0)) { w1[i] <- ifelse(w0[i] %in% letters, shuffledletters[which(w0[i]==letters)], " ") } # 创建命名列表,并添加自定义类标识 out <- list(initial = w0, encrypted = w1) class(out) <- "cipher_result" return(out) } # 为自定义类编写专属打印方法 print.cipher_result <- function(x, ...) { print(x$initial, ...) invisible(x) # 确保对象本身可被后续操作正常调用 }
测试效果
TEST <- cipher("hello world") # 直接调用对象,默认显示初始短语 TEST #> [1] "h" "e" "l" "l" "o" " " "w" "o" "r" "l" "d" # 通过$访问初始短语 TEST$initial #> [1] "h" "e" "l" "l" "o" " " "w" "o" "r" "l" "d" # 通过$访问加密版本(结果因sample随机化会有差异) TEST$encrypted #> [1] "p" "s" "r" "r" "a" " " "y" "a" "j" "r" "m"
关键说明
- 给列表命名为
initial和encrypted,确保可以通过$直接定位到对应元素 - 添加自定义类
cipher_result,让R识别该对象需要使用我们编写的专属打印逻辑 print.cipher_result方法仅打印初始短语,invisible(x)保证对象本身不会被打印操作消耗,后续仍能正常访问所有元素
内容的提问来源于stack exchange,提问作者Luigi
相关产品推荐
相关产品推荐

